当前位置: 代码迷 >> 汇编语言 >> 关于王爽汇编语言检测点10.4的有关问题,请明白人儿给予解答,多谢
  详细解决方案

关于王爽汇编语言检测点10.4的有关问题,请明白人儿给予解答,多谢

热度:3780   发布时间:2013-02-26 00:00:00.0
关于王爽汇编语言检测点10.4的问题,请明白人儿给予解答,谢谢!
看了答案是ax=000bh,但不知为何为这值,请重点分析一下。
内存地址           机器码           汇编指令
1000:0               b8   00   00       mov   ax,6
1000:2               ff   d0             call,ax
1000:5               40                   inc   ax
1000:6                                     mov   bp,sp
                                                add   ax,[bp]

第四行   sp是否等于   0fffeh

------解决方案--------------------------------------------------------
在执行了
call ax
的时候
指令寄存器会指向下一条指令的起始地址,也就是
1000:5 inc ax
然后指令寄存器ip=5要压入堆栈
然后跳转到cs:ax指定的地址执行
又因为此时ax中的值为6 ,cs=1000
所以跳转到1000:6执行
于是修改 ip为6
到此时call ax指令才执行完毕

然后就执行
mov bp,sp
因为sp里面放的是堆顶的地址,所以bp也是栈顶的地址了
之后
add ax,[bp]
因为,bp里面放的是栈顶的地址,所以 [bp] 寄存器寻址后 [bp]实际是代表该地址单元的内容,也就是栈顶的内容,因为先前我把ip压入了堆栈,所以[bp]得到的内容就是5(先前在call ax时候压入的ip的值)

所以 ax=ax+[bp]
也就是 ax=6+5=B
------解决方案--------------------------------------------------------
ddrmsdos(handong) 解释的太清楚了。完全正确。
------解决方案--------------------------------------------------------
  相关解决方案