在 NASM 中为 Windows 设置退出状态

Setting Exit Status in NASM for Windows

我目前正在尝试学习一些基本的 x86 程序集,运行 遇到一些困难 运行 它在 Windows 上。我要做的就是设置退出状态。如果我在 Linux:

,我知道该怎么做
global _start
_start:
    mov eax,1
    mov ebx, 52
    int 0x80

显然这将给出退出状态 52。我如何在 Windows 上执行此操作?我找遍了也没有找到明确的答案。

How do I do this on Windows? I looked all over but couldn't find a clear answer.

这就是问题所在:没有明确的答案。 Windoze 是一团糟。使用 Linux 并快乐。 :−)

如前所述,没有通用方法与OS交互。 例如,在 WinD0S 上,它应该是 int 21h:

segment code

start:
    mov ah, 0x4C   ; function `exit – terminate with return code`
    mov al, 52     ; return code
    int 0x21       ; DOS kernel interrupt

你可能想做的是,正如 已经指出的那样,使用 ExitProcess:

global start

extern _ExitProcess@4

section .text

start:
    push 52
    call _ExitProcess@4

在具有 wine(1) 安装的 GNU/Linux Debian(类似)系统上,步骤如下:

nasm -f win32 -o exitdemo.obj exitdemo.asm
i686-w64-mingw32-ld exitdemo.obj -lkernel32 -o exitdemo.exe
wine ./exitdemo.exe; echo $?