检测点10.4作业练习
assume cs:codecode segment
start: mov ax,6
call ax
inc ax
mov bp,sp
add ax,
mov ax,4c00h
int 21h
code ends
end start
;最终的ax值为000Bh
;因为sp的值为FFFE,所以把FFFE赋值给了bp
;执行add ax,时,=SS:FFFE=0005h
;所以ax=6+5=000Bh 为什么sp的值是fffe 我知道了因为是空栈 不对不对,应该是因为把call ax assume cs:code
code segment
start: mov ax,6
call ax
inc ax
mov bp,sp
add ax,
mov ax,4c00h
int 21h
code ends
end start
;最终的ax值为000Bh
;因为sp的值为FFFE,所以把FFFE赋值给了bp
;执行add ax,时,=SS:FFFE=0005h/为什么这里是0005h
;所以ax=6+5=000Bh 文小诗 发表于 2020-3-28 15:52
assume cs:code
code segment
你可以直接上程序看一下;
因为SP的值为FFFE;
然后赋值给了bp;
执行add ax,时,=SS:FFFE;
所以add ax,等于add ax,SS:等于add ax,SS:FFFE;
而SS:FFFE的值为0005h;
所以最后结果就是000Bh。
callax
功能puship
jmp16位寄存器
ip不是应该等于6吗?
文小诗 发表于 2020-3-30 23:01
callax
功能puship
jmp16位寄存器
是的,ip是等于6;
call ax的功能就是:
当执行这条代码之后,直接跳转到ip值为6的代码段那里去了,你没发现call ax下面的inc ax没有执行到吗?
直接执行ip等于6 的代码段那里了,而刚好就是mov bp,sp。 懂了,谢谢 文小诗 发表于 2020-3-30 23:01
callax
功能puship
jmp16位寄存器
push ip的ip是这条指令的下一个
call ax的地址为3,此时ip已经指向下一条指令了,所以入栈的ip为5.
页:
[1]