call指令的一个细节

October 7, 2013
masm

执行下面这个程序之后,ax的值是多少?

assume cs:code

code segment
start:
    mov ax, 0
    call s
    inc ax
s:
    pop ax

    mov ax, 4c00h
    int 21h
code ends

end start

答案是0006h

这道题目要做对首先要明白CPU执行指令的机制,IP值的增加实在指令送入指令缓冲器中进行的,也就是指令执行之前。所以,执行到call s的时候,压入栈的ax值是6h=_=

comments powered by Disqus