一个经典汇编问题:为什么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就乱飞呢……求解释啊!
我在多家网站看到这个例题。截图上的说明突然让我凌乱了啊,有木有:

看吧:
.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就乱飞呢……求解释啊!
...全文
相关推荐
汇编语言_入门经典教材
**常用汇编程序**:市场上有许多不同的汇编程序可供选择,包括MASM(Microsoft Macro Assembler)、TASM(Turbo Assembler)和DEBUG等。
计算机综合实践.pdf
学习如何利用DEBUG发现并修正汇编语言程序错误。进入DEBUG的方法主要有三种:1. 通过Windows的“运行”命令直接输入“DEBUG”。2. 先打开DOS命令窗口,再输入“DEBUG”。3.
DOS汇编工具包(基于dosbox,包含debug,edit,masm)
**调试与测试**:使用DEBUG工具对汇编后的程序进行调试,检查内存、设置断点等。6. **运行程序**:如果一切正常,可以在DOSBox中直接运行生成的可执行文件,观察程序运行结果。
Mac汇编工具:debug,edit,MASM,LINK
在汇编语言编程中,往往需要把不同功能的模块分开编写,然后通过链接器将它们组合在一起,解决符号引用问题,并添加必要的启动代码和资源信息。
汇编语言和debug用法(汇编语言和debug用法)
**理解指令执行**:通过DEBUG的单步执行和反汇编功能,可以直观地看到每条汇编指令如何转化为机器码,以及它们在实际运行中的效果。2.


