C++之汇编内存访问

来源:互联网 发布:linux命令配置ip地址 编辑:程序博客网 时间:2024/05/22 00:29

先看图

20000000这个意思是前面2000表示的是段地址,后面的0000就是偏移地址也就是IP指针寄存器,这里都是16进制表示的,每两个数字表示一个字节,也就是8个位,这里所有用到的都是16进制,所以注意看看是多少个位;cs表示的是代码寄存器,也就是说我们汇编所写的指令都是在代码段下进行的,来看看测试;

 

 

上面可以分析出,cpu在代码段2000ip等于0的时候ax的值没有变,是因为我们在写汇编指令的时候写在了07700这个内存上面,所以现在我们在内存地址是20000的地址写上汇编指令看看情况:

说明什么啊,说明1000这个数没有内存,现在再来看看,我对1000这个段加上偏移值,构成物理地址也就构成了内存;

内存已经写进去了,现在再来执行机械指令20000这个地方内存的指令:

实验证明,不管改不改内存偏移跟他每关系,其实是指针寄存器ip出了问题:

宗上可得,机器指令在执行汇编指令的时候是要知道代码段在哪里,代码段下面的汇编指令,段地址,指针ip地址;

 

从分析可得:mov ax1000,这句意思是定义ax段的开始位置也就是段值,1000这个段的偏移值是多少自己定义的,此时的10000表示的就是在该段的物理地址啦,也就是内存了,还有就是用[]表示的时候他默认是执行ds数据段寄存器里面的数据,好难讲清楚画幅图片吧: