我在正确终止用 Assembly 编写的 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 应用程序?
最佳答案
Brendan 的回答显示了如何退出,但它没有定义错误级别(它将是 AL 寄存器中的任何内容......)
如果您想以错误级别 0 退出:
mov ax,0x4c00
int 0x21
如果您想以错误级别 1 退出:
mov ax,0x4c01
int 0x21
https://stackoverflow.com/questions/8821656/