NASM教程使用int 80h,但这不适用于Windows

完成FASM后,我开始NASM汇编。 我正在Windows操作系统中编码。 我的代码如下:

section.data ;Constant msg: db "Hello World!" msg_L: equ $-msg ; Current - msg1 section.bss ;Varialble section.text ; Code global _WinMain@16 _WinMain@16: mov eax,4 mov ebx,1; Where to wrte it out. Terminal mov ecx, msg mov edx, msg_L int 80h mov eax, 1 ; EXIT COMMAND mov ebx,0 ; No Eror int 80h 

编译它并执行我使用:

 nasm -f win32 test.asm -o test.o ld test.o -o test.exe 

我目前正在关于NASM教程的video。 我改变了开始到WIN32,但是当我执行它,它只是卡住,不会运行…有这个问题吗?

您正试图在Windows操作系统上进行Linux系统调用( int 80h )。

这是行不通的。 您需要调用Windows API函数。 例如, MessageBox将在屏幕上显示一个消息框。

 section.data ;Constant msg: db "Hello World!" msg_L: equ $-msg ; Current - msg1 section.bss ;Varialble section.text ; Code global _WinMain@16 extern _MessageBoxA@16 _WinMain@16: ; Display a message box push 40h ; information icon push 0 push msg push 0 call _MessageBoxA@16 ; End the program xor eax, eax ret 

确保你正在阅读的书/教程是关于使用NASM的Windows编程,而不是Linux编程!