我在正确终止汇编语言编写的16位DOS程序时遇到了一个问题。下面是部分代码:
.386P
.model flat
stack_s segment stack 'stack'
db 256 dup(0)
stack_s ends
data segment use16
data ends
code segment 'code' use16
assume cs:code, ds:data
main proc
mov ax, data
mov ds, ax
iretd
main endp
code ends
end main
问题是,程序没有以正确的方式终止。DOSBox只是冻结。我试图使用调试器了解发生了什么,似乎程序只是在执行iretd
后结束了无限循环。为什么会发生这种情况?我如何才能正确终止16位DOS应用程序?
3条答案
按热度按时间vyu0f0g11#
Brendan的答案显示了如何退出,但未定义错误级别(它将是AL寄存器中的任何内容...)
如果您希望退出时错误级别为0:
如果要退出时出现错误级别1:
zmeyuzjn2#
结束DOS程序最正确的方法是使用"终止" DOS函数;然后加上适当的注解,以便人们理解这个函数不会返回。
例如:
yks3o0rb3#
如果你想退出时没有任何特定的错误代码,这是要走的路:
但是如果你想返回一个特定的错误代码,这是一个更好的方法: