下面程序执行后,ax中的数值为多少? (注意:用call指令原理分析,不要在debug中验证)
assume cs:codesg
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax, stack
mov ss, ax ;设置ss指向stack数据段
mov sp, 16 ;设置sp栈指针指向栈底
mov ds, ax ;ds也指向stack段
mov ax, 0
call word ptr ds:[0EH]
执行这条语句时, ip已经指向下一条语句, 即“inc ax”. 那么设此时IP = x;
call 相当于push IP; IP= x; 然后jump 到 ds:[0EH], 又因为ds:[0EH] = x;
故结果IP依然等于原值, 程序顺序执行
inc ax
inc ax
inc ax
mov ax, 4c00h
int 21h
code ends
end start
结果:ax = 3