为什么最后IP=0
http://bbs.fishc.com/data/attachment/album/201109/14/211441a1jfsj1aqq3zqh18.png前面sub ax,ax时 ax = 0 在执行了jmp ax 后将ax的值给了ip所以ip = 0 2楼正解
sub ax,ax sub 是减的意思
ax 就是0了
jmp ax 就是把IP的值修改成AX的 值~~~~ 那个sub是什么意思啊都没有讲到 还是不懂求解为什么现在这么初级的我都理解这么困难呢 改变了4次IP还是不理解我还是认为是改了三次 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
不知道我解释你满意否。
LZ你截的图中的说明“设置AX为IP的值嘛“应该是在第4步“执行完jmp ax"。
这里不能理解四步的主要就是对楼上说的那个CPU读取指令,ip更改,执行指令那部分应该没有好好看。。。 告诉你一个好办法,写完指令后,用DEBUG查看每执行一条指令后,各个寄存器的变花
鱼哥教过的么!:P 我明白了,知道了sub我就明白了!!谢谢啊!!{:1_1:}
页:
[1]