HOPEyi 发表于 2011-9-14 21:16:16

为什么最后IP=0

http://bbs.fishc.com/data/attachment/album/201109/14/211441a1jfsj1aqq3zqh18.png

Ak.xuer 发表于 2011-9-14 22:35:52

前面sub ax,ax时 ax = 0   在执行了jmp ax 后将ax的值给了ip所以ip = 0

郑小夕 发表于 2011-9-14 23:00:46

2楼正解
sub ax,ax      sub 是减的意思
ax 就是0了
jmp ax 就是把IP的值修改成AX的 值~~~~

mrcoolxdg 发表于 2011-9-14 23:02:10

那个sub是什么意思啊都没有讲到

mrcoolxdg 发表于 2011-9-14 23:03:04

还是不懂求解为什么现在这么初级的我都理解这么困难呢

mrcoolxdg 发表于 2011-9-14 23:10:45

改变了4次IP还是不理解我还是认为是改了三次

Mr.han 发表于 2011-9-15 02:34:06

mrcoolxdg 发表于 2011-9-14 23:10 static/image/common/back.gif
改变了4次IP还是不理解我还是认为是改了三次

刚开始学的时候我也认为是3次,但是仔细看了看书,就明白了。
前两条指令应该好说,每条指令分别修改一次IP
第三条指令 JMP AX

我们先看CPU 执行指令的过程:
1、从cs:ip 指向的内存单元读取指令
2、ip=ip+所读取指令的长度,从而指向下一条指令
3、执行指令


步骤2中修改了一次ip吧,这次修改ip和前两次修改ip道理是一样的,cpu读取完指令后,ip都要自增的
第四次修改Ip在哪呢?JMP本身是一个转移指令,CPU执行步骤3的时候,将IP改成寄存器AX中的值,所以,就进行了4次修改IP

不知道我解释你满意否。

tsembrace 发表于 2011-9-15 09:03:34

LZ你截的图中的说明“设置AX为IP的值嘛“应该是在第4步“执行完jmp ax"。
这里不能理解四步的主要就是对楼上说的那个CPU读取指令,ip更改,执行指令那部分应该没有好好看。。。

小黄 发表于 2011-9-15 14:02:32

告诉你一个好办法,写完指令后,用DEBUG查看每执行一条指令后,各个寄存器的变花
鱼哥教过的么!:P

HOPEyi 发表于 2011-9-15 15:00:19

我明白了,知道了sub我就明白了!!谢谢啊!!{:1_1:}
页: [1]
查看完整版本: 为什么最后IP=0