题目:下面的程序执行后,ax中的数值为多少?(注意用call指令的原理来分析,不要在Debug中单步跟踪来验证你的结论。对于此程序,在Debug中单步跟踪的结果,不能代表CPU的实际执行结果)
assume cs:codesg
stack segment
dw 8 dup (0)
stack ends
codesg segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0EH]
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
codesg ends
end start
本来按上面的代码分析,call执行的时候,第一个 inc ax 的首地址先进栈,然后以ds:[0EH]这个地址的数据作为IP,执行IP指向的代码。而这里的ss和ds是相同的,ds:[0EH]就是栈顶元素,也就是刚入栈的"第一个 inc ax 的首地址",故应该执行的代码是“第一个 inc ax ”,最后结果应该是3.
因为这个代码在调试的时候是不能按正常运行的,我不知道我的分析对不对。另外,为什么这个程序不能正常调试,也是个问题。