看,这个问题是如何的经典!
我在多家网站看到这个例题。截图上的说明突然让我凌乱了啊,有木有:
看吧:
.model small
.data
dw 8 dup(0)
.code
start:
mov ax, @data
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0eh]
mov ax,4c00h
int 21h
end start
程序直接运行,可以正常结束;
用debug调试,到call word ptr ds:[0eh]的地方,再单步执行一句,IP寄存器就莫名其妙的乱七八糟,怎么都回不到正常的IP了……
求解释。
其实程序正常结束是可以理解的,稍作分析就知道 ds:[0eh]的值恰好是 mov ax, 4c00h的地址,所以一个call把这个地址又放到了IP中,所以自然可以结束……但为什么debug调试IP就乱飞呢……求解释啊!
------解决方案--------------------------------------------------------
你什么时候把mov ax, 4c00h的地址放进去呢?
你还不如直接 JMP word ptr ds:[0eh] 呢
------解决方案--------------------------------------------------------
同上。。。
------解决方案--------------------------------------------------------