2012-05-07 40 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程序 –

相關問題