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