|
发表于 2011-10-2 21:14:10
|
显示全部楼层
本帖最后由 老头子学汇编 于 2011-10-3 02:37 编辑
- 内存地址 机器码 汇编指令
- 1000:0000 B80600 mov ax,0006
- 1000:0003 FFD0 call ax
- 1000:0005 40 inc ax
- 1000:0006 89E5 mov bp,sp
- 1000:0008 034600 add ax,[bp]
- --------------------------------------------
- mov ax,0006 ;这个不用说你也知道的!
- call ax ;将下一条指令的IP=0005压入栈,此时栈顶应该是sp=FFFE ,
- 因为AX=0006,然后跳转(位移)到1000:0006,
-
- inc ax ;因为上一条指令CALL AX,已经跳转到1000:0006,
- 这一步没有执行
-
- mov bp,sp ;sp=FFFE放入bp
- add ax,[bp] ; ax+[bp],结果存放在AX中:0006+0005=000b
- ax=0006
- [bp]的内容就=0005,因为CALL AX把0005压入栈了!
- [bp] 在前面没有规定段寄存器,它默认的段地址是SS的
- 比如(es[bp],ds[bp])它的段地址就是ES和DS
复制代码 |
|