当前位置: 代码迷 >> 汇编语言 >> 一个经典汇编有关问题:为什么DEBUG运行和直接运行结果不同
  详细解决方案

一个经典汇编有关问题:为什么DEBUG运行和直接运行结果不同

热度:6890   发布时间:2013-02-26 00:00:00.0
一个经典汇编问题:为什么DEBUG运行和直接运行结果不同
看,这个问题是如何的经典!
我在多家网站看到这个例题。截图上的说明突然让我凌乱了啊,有木有:


看吧:

.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] 呢
------解决方案--------------------------------------------------------
同上。。。
------解决方案--------------------------------------------------------
探讨

咕~~(╯﹏╰)b……我的问题是:

为什么直接运行没有错误,而DEBUG单步运行IP就乱飞……

LS能再说明白一点吗?
  相关解决方案