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

时间:2016-07-08 14:34:14

标签: windows winapi assembly x86 nasm

我在完成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教程的视频。我把开始改为WIN32,但是当我执行它时,它就会卡住并且不会运行......有任何问题吗?

1 个答案:

答案 0 :(得分:9)

您正尝试在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编程!