|
主题 : : 第33页检测点2.3的那个“SUB”没学过啊 [待解决] |
回复[ 10次 ]
点击[ 660次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-10-21 19:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
mov ax,bx
sub ax,ax
jmp ax
那个sub是什么意思啊,是不是印错了啊 | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-10-21 19:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
问题是问IP的值修改了多少次,IP的值最的是多少
我想IP一共修改了4次,最后的值是多少就不知道了,因为不懂那个SUB | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-10-23 10:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:9
注册日期:2007-10-19 10:16 |
sub ax,ax 的意思是执行操作ax = ax - ax,结果ax = 0;
所以执行指令jmp ax 使IP = 0000H。
具体操作如下:
因为IP是用来存放下一条待执行的指令的偏移地址,所以CPU修改了4次IP的值。
情况如下:
读入mov ax, bx前,IP指向指令sub ax, ax的首地址B;
第1次:读入mov ax, bx后,IP指向指令sub ax, ax的首地址C;
第2次:执行完mov ax, bx后,读入sub ax, ax, 此时IP指向指令jmp ax的首地址D;
第3次:执行完sub ax, ax后,读入jmp ax,此时IP指向指令jmp ax的下一条指令的首地址E;
第4次:执行完jmp ax后; IP等于寄存器ax的值,为0010H。
最后IP的值为0000H。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-10-23 10:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41 |
|
|
|
|
|
[第4楼]
[ 回复时间:2007-10-23 10:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
但好像书上32而的举例不是这样的啊
执行完 mov ax,bx 后(这时IP的值才修改了,IP=IP+3)
然后 执行 sub,ax,ax(这时IP的值进行第二次修改,IP=IP+?)
最后执行 jmp ax (这条命令让IP连续变了两次,第一次是IP=IP+?,因为每读入一条指令IP的值都会变的,同时因为此条命令本身又是修改IP的值,所以第二次就是IP=0了)
所以是这样修改了4次IP
我的想法好像跟2楼的有点区别 | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-10-23 10:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34 |
我再看了看 应该是跟二楼的一样的道理的 不过我是照书上32页的一个例子的原理去理解,而2楼的理解比我更专业 | | |
|
|
|
|
[第6楼]
[ 回复时间:2007-10-24 19:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:9
注册日期:2007-10-19 10:16 |
确实我在2楼打错了:“读入mov ax, bx前,IP指向指令sub ax, ax的首地址B; ”
应该改为“读入mov ax, bx前,IP指向指令mov ax, bx的首地址B; ” | | |
|
|
|
|
[第7楼]
[ 回复时间:2007-10-27 02:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-03 16:06 |
读入mov ax, bx前,IP指向指令mov ax, bx的首地址B
第1次:读入mov ax, bx后,IP指向指令sub ax, ax的首地址C;
第2次:执行完mov ax, bx后,读入sub ax, ax, 此时IP指向指令jmp ax的首地址D;
第3次:执行完sub ax, ax后,读入jmp ax,此时IP指向指令jmp ax的下一条指令的首地址E;
第4次:执行完jmp ax后; IP等于寄存器ax的值,为0010H。
最后IP的值为0000H。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-03-21 15:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-12 20:06 |
7楼:
第4次:执行完jmp ax后; IP等于寄存器ax的值,为0010H 为什么是00010H??????
==============================================
执行完jmp ax后; IP等于寄存器ax的值,应给为0000H | | |
|
|
|
|
[第9楼]
[ 回复时间:2008-03-24 04:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-21 18:15 |
个人认为ip变更为四次。
0:初始值;
1:读入第一条语句(mov ax,bx)后更改ip;
2:执行第一条语句,读入第二条语句(sub ax,ax)后更改ip;
3:执行第二条语句,读入第三条语句(jmp ax)后更改ip;
4:执行第三条语句,因此语句直接变更ip,此时ip为ax值。
可参考书上的例子,从p32第五行(3)开始至(6)结束,ip变更为4次。 | | |
|
|
|
|
[第10楼]
[ 回复时间:2008-03-24 04:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-21 18:15 |
关键在于jmp读入后指针会移动,
但执行完jmp之后指针会再次移动。
这里ip变更了2次。
不知理解真确与否,记得c语言中的指针就是把我弄晕了的。 | | |