Windows でアセンブリ言語で Hello World を書くにはどうすればいいですか? 質問する

Windows でアセンブリ言語で Hello World を書くにはどうすればいいですか? 質問する

Windows でアセンブリ言語で基本的なものを書きたいと思いました。NASM を使用していますが、何も機能しません。

Windows 上で C 関数を使わずに hello world プログラムを作成してコンパイルするにはどうすればよいですか?

ベストアンサー1

この例では、C 標準ライブラリにリンクせずに、Windows API に直接アクセスする方法を示します。

    global _main
    extern  _GetStdHandle@4
    extern  _WriteFile@20
    extern  _ExitProcess@4

    section .text
_main:
    ; DWORD  bytes;    
    mov     ebp, esp
    sub     esp, 4

    ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
    push    -11
    call    _GetStdHandle@4
    mov     ebx, eax    

    ; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push    0
    lea     eax, [ebp-4]
    push    eax
    push    (message_end - message)
    push    message
    push    ebx
    call    _WriteFile@20

    ; ExitProcess(0)
    push    0
    call    _ExitProcess@4

    ; never here
    hlt
message:
    db      'Hello, World', 10
message_end:

コンパイルするには、NASM と LINK.EXE (Visual Studio Standard Edition から) が必要です。

   nasm -fwin32 hello.asm
   リンク /subsystem:console /nodefaultlib /entry:main hello.obj

おすすめ記事