assembly - 如何正确结束 assembly ?

我在正确终止用 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/

相关文章:

ruby-on-rails - 如何在 Ruby 中将数组的数组从字符串转换为 float ?

macos - 在 Mac OS X 中使用命令行杀死 "loginwindow"进程

r - 在 R 中,如何在运行具有大量变量的多元回归后仅提取重要变量

math - alpha 混合如何在数学上逐个像素地工作?

php - php脚本可以打印回他们的文件名吗?

objective-c - 如何将 32 位 PNG 转换为 RGB565?

cuda - GPU Gems 3 的并行前缀算法中使用的 CONFLICT_FREE_OFFSET

assembly - 为什么我们必须清理堆栈

jsf - 命令按钮操作不起作用

php - 你如何使 preg_replace 捕获大写 (php)?