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

那个人的 那个人的 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看,这个问题是如何的经典!
我在多家网站看到这个例题。截图上的说明突然让我凌乱了啊,有木有:


看吧:

.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就乱飞呢……求解释啊!
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
那个人的
汇编语言 21,500 成员 41,619 内容