2012-05-07 43 views
1

我正在使用Windows 7学习汇编语言。我使用NASM创建目标文件和mingw以创建可执行文件。无法在Windows 7中运行由nasm生成的可执行文件

我使用的编译下面的命令,并运行可执行文件

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 

我有下面

所示的错误3210

enter image description here

我的程序代码

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 
+0

向我们展示代码。 – paxdiablo

+0

我的系统类型:32位操作系统 –

回答

3

你有什么有的Linux代码(int 80sys_writesys_exit为内核的系统调用,而低层次的东西)。

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

MinGW是极简主义的GNU为Windows,一种使用gcc工具链编写Windows应用程序的方式。您必须遵循Windows规则。

+0

+1。很好的接收。 :) –

+0

如何使用nasm编译8086程序 –

+0

除了选项之外,你正在编译(技术上)组装它。我不认为你想使用ELF格式(因为这不是Windows的工作方式),或BIN格式(因为这是平面文件(如古老的COM文件),而不是EXE格式)。你的问题不是编译_process_,而是编译的源代码。您需要编写能够与Windows操作系统交流的代码,而不是Linux操作系统。例如,请参阅http://stackoverflow.com/questions/572818/best-book-to-learn-windows-assembly-programming。 – paxdiablo

2

除了调用linux内核的代码之外,正如paxdiablo指出的那样,您已经将它组装到了平面窗体二进制文件,它不会在windows下运行。您需要使用nasm -f win32

+0

如何使用nasm编译8086程序 –

相关问题