我剛剛接觸使用匯編代碼進行編程的硬件。所以,我讀了一本書,並發現了NASM彙編此示例代碼:Windows 8 x64上的彙編代碼
segment .text ;code segment
global main ;must be declared for linker
main: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
segment .data ;data segment
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
所以我用下面的命令編譯它:
nasm -f elf64 helloworld.asm
ld -s -o helloworld.exe helloworld.o
彙編器有沒有問題,進行組裝,並給出沒有錯誤,但程序立即崩潰。我讀過不同的彙編語言,但問題是彙編代碼因不同的編譯器而異,而不是使用不同的操作系統,所以我的錯誤在哪裏?
爲什麼你認爲這個問題是操作系統。如果運行Windows 7,它可能會在同一臺計算機上崩潰。您是否測試過這種情況?如果它不是操作系統,那就離開機器。 –
對於任何x64操作系統,我會先嚐試'mov rcx,msg'(我也懷疑Win 8使用linux風格的系統調用,Windows 7沒有。) –
[Win8似乎並沒有使用INT作爲系統調用](http ://wiki.osdev.org/SYSENTER)。 –