. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第33页检测点2.3的那个“SUB”没学过啊  [待解决] 回复[ 10次 ]   点击[ 660次 ]  
helloworld
[帖 主]   [ 发表时间:2007-10-21 19:44 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
mov ax,bx
sub ax,ax
jmp ax

那个sub是什么意思啊,是不是印错了啊
helloworld
[第1楼]   [ 回复时间:2007-10-21 19:46 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
问题是问IP的值修改了多少次,IP的值最的是多少
我想IP一共修改了4次,最后的值是多少就不知道了,因为不懂那个SUB
goal00001111
[第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。
huibian
[第3楼]   [ 回复时间:2007-10-23 10:47 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
顶下,
第一次做的时候我还以为是三次呢~
helloworld
[第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楼的有点区别
helloworld
[第5楼]   [ 回复时间:2007-10-23 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
我再看了看 应该是跟二楼的一样的道理的 不过我是照书上32页的一个例子的原理去理解,而2楼的理解比我更专业
goal00001111
[第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; ”
zjcjcj
[第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。
pen.11
[第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
alone
[第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次。
alone
[第10楼]   [ 回复时间:2008-03-24 04:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-21 18:15
关键在于jmp读入后指针会移动,
但执行完jmp之后指针会再次移动。
这里ip变更了2次。

不知理解真确与否,记得c语言中的指针就是把我弄晕了的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved