2

我正在使用 windows 7 来学习汇编语言。我正在使用 NASM 来创建目标文件和 mingw 来创建可执行文件。

我正在使用以下命令编译和运行可执行文件

del hello.o
del hello.exe
nasm -f elf hello.asm
ld hello.o -o hello.exe
hello

运行 hello.exe 文件时,显示“hello.exe 已停止工作”的错误消息

在使用以下命令时

    nasm -f bin hello.asm -o program.exe

我有一个错误如下所示

在此处输入图像描述

我的程序代码

global _start            ; global entry point export for ld
section .text
_start:
; sys_write(stdout, message, length)
mov eax, 4        ; sys_write syscall
mov ebx, 1        ; stdout
mov ecx, message    ; message address
mov edx, length        ; message string length
int 80h
; sys_exit(return_code)
mov eax, 1        ; sys_exit syscall
mov ebx, 0        ; return 0 (success)
int 80h
section .data
message: db 'Hello, world!',0x0A    ; message and newline
length: equ $-message            ; NASM definition pseudo-instruction
4

2 回答 2

3

你所拥有的是Linux代码(int 0x80sys_write并且sys_exit作为内核系统需要相当低级的东西)。

我不相信在 Windows 操作系统上运行时尝试调用 Linux 内核是个好主意。这不太可能结束:-)

MinGW 是适用于Windows的极简 GNU ,一种使用gcc工具链编写 Windows 应用程序的方式。因此,您必须遵守 Windows 规则。

于 2012-05-07T06:56:46.163 回答
2

除了调用 linux 内核的代码,正如 paxdiablo 指出的那样,您已经将它组装成平面形式的二进制文件,它不会在 Windows 下运行。你需要使用nasm -f win32.

于 2012-05-07T07:16:00.060 回答