在 Windows 7 条调试指令中有效的循环语句在 DOSBox 0.74 中无效
Looping statement that works in Windows 7 debug instructions won't work in DOSBox 0.74
我们有一个关于汇编语言循环的activity。我们的任务很简单:显示数字 0 到 9,每个数字之间有空格。我在我们学校的 WINDOWS 7 中使用 'debug' 命令获得了在命令提示符下工作的代码。我的笔记本电脑是 Windows 10,我最近发现命令提示符中没有 'debug' 命令。所以我尝试在 DOSBox 0.74(可能是最新的)中编写我的代码。每次我 运行 它在 DOSBox 中时,程序突然挂起然后崩溃。这是代码
mov cx,0a
mov ah,02
mov dl,30
int 21
mov bl,dl
mov dl,20
int 21
mov dl,bl
inc dl
loop 0107
int 20
谁能解释一下为什么 DOSBox 会崩溃?
这是工作程序的示例图片,运行在 Windows 7 的 cmd 中:
AX
是 DOS 中断 int 21h
的易失性寄存器。因此 AH=02h
的内容将被 INT 21h
调用覆盖。我能找到的唯一参考来源是关于 Interrupt Services from the Mississippi State University 的文档,该文档在第一页上指出:
BIOS (and most DOS) ISRs Preserve Register Contents – Except ax
所以在你的代码中
int 21 ; alters AX
mov dl,bl ; AH is undefined
inc dl ; DL is increased correctly
loop 0107
您错误地假设 AH
仍然包含 02h
的值。这不是(必然)的情况。
所以在循环语句之前添加一个MOV AH, 02h
,你的程序应该执行错误较少,因为你的INT 21h
位于0107
然后会调用正确的DOS函数02h
.
尽管您的问题与另一个 的问题不重复,但似乎有某些相似之处。即意外挂起或异常行为。在 DOSBox 中 运行 时,可用于 MS-DOS 的 DEBUG.EXE
版本似乎并不总是正常运行。这可能是因为 DOSBox 可能无法 100% 兼容模拟真正的 PC/Hardware(和 DOS)。这可能会导致某些程序 and/or 操作系统在 DOSBox 中使用时无法按预期工作。
我已经修改了我之前的提示各种MS-DOSDEBUG.EXE
程序在DOSBox下运行可能无法正常工作。 Ross Ridge 确认他可以在 DOSBox 中 运行 时使用 DOS 6.22 的调试器复制您的问题。
DEBUG.COM
有一个版本 FreeDOS that seems to play well with DOSBox. I have made the FreeDOS version of DEBUG.COM available for download from my website. Alternatively you can download the ZIP File 从 Softpedia 发布并提取 DEBUG.COM
。
我们有一个关于汇编语言循环的activity。我们的任务很简单:显示数字 0 到 9,每个数字之间有空格。我在我们学校的 WINDOWS 7 中使用 'debug' 命令获得了在命令提示符下工作的代码。我的笔记本电脑是 Windows 10,我最近发现命令提示符中没有 'debug' 命令。所以我尝试在 DOSBox 0.74(可能是最新的)中编写我的代码。每次我 运行 它在 DOSBox 中时,程序突然挂起然后崩溃。这是代码
mov cx,0a
mov ah,02
mov dl,30
int 21
mov bl,dl
mov dl,20
int 21
mov dl,bl
inc dl
loop 0107
int 20
谁能解释一下为什么 DOSBox 会崩溃?
这是工作程序的示例图片,运行在 Windows 7 的 cmd 中:
AX
是 DOS 中断 int 21h
的易失性寄存器。因此 AH=02h
的内容将被 INT 21h
调用覆盖。我能找到的唯一参考来源是关于 Interrupt Services from the Mississippi State University 的文档,该文档在第一页上指出:
BIOS (and most DOS) ISRs Preserve Register Contents – Except ax
所以在你的代码中
int 21 ; alters AX
mov dl,bl ; AH is undefined
inc dl ; DL is increased correctly
loop 0107
您错误地假设 AH
仍然包含 02h
的值。这不是(必然)的情况。
所以在循环语句之前添加一个MOV AH, 02h
,你的程序应该执行错误较少,因为你的INT 21h
位于0107
然后会调用正确的DOS函数02h
.
尽管您的问题与另一个 DEBUG.EXE
版本似乎并不总是正常运行。这可能是因为 DOSBox 可能无法 100% 兼容模拟真正的 PC/Hardware(和 DOS)。这可能会导致某些程序 and/or 操作系统在 DOSBox 中使用时无法按预期工作。
我已经修改了我之前的DEBUG.EXE
程序在DOSBox下运行可能无法正常工作。 Ross Ridge 确认他可以在 DOSBox 中 运行 时使用 DOS 6.22 的调试器复制您的问题。
DEBUG.COM
有一个版本 FreeDOS that seems to play well with DOSBox. I have made the FreeDOS version of DEBUG.COM available for download from my website. Alternatively you can download the ZIP File 从 Softpedia 发布并提取 DEBUG.COM
。