C++之汇编内存访问
先看图
2000:0000这个意思是前面2000表示的是段地址,后面的0000就是偏移地址也就是IP指针寄存器,这里都是16进制表示的,每两个数字表示一个字节,也就是8个位,这里所有用到的都是16进制,所以注意看看是多少个位;cs表示的是代码寄存器,也就是说我们汇编所写的指令都是在代码段下进行的,来看看测试;
上面可以分析出,cpu在代码段2000,ip等于0的时候ax的值没有变,是因为我们在写汇编指令的时候写在了0770:0这个内存上面,所以现在我们在内存地址是2000:0的地址写上汇编指令看看情况:
说明什么啊,说明1000这个数没有内存,现在再来看看,我对1000这个段加上偏移值,构成物理地址也就构成了内存;
内存已经写进去了,现在再来执行机械指令2000:0这个地方内存的指令:
实验证明,不管改不改内存偏移跟他每关系,其实是指针寄存器ip出了问题:
宗上可得,机器指令在执行汇编指令的时候是要知道代码段在哪里,代码段下面的汇编指令,段地址,指针ip地址;
从分析可得:mov ax,1000,这句意思是定义ax段的开始位置也就是段值,1000这个段的偏移值是多少自己定义的,此时的1000:0表示的就是在该段的物理地址啦,也就是内存了,还有就是用[]表示的时候他默认是执行ds数据段寄存器里面的数据,好难讲清楚画幅图片吧: