Gas、NASM、およびYASMでマルチプラットフォームの Hello World コードを動作させています。基本的な Hello World C プログラムが80KB の実行可能ファイルであり、アセンブリははるかに小さいはずです。実行可能ファイルの大部分は、リンカー オプションからのジャンクで満たされていると思います。
痕跡:
LIBS=c:/strawberry/c/i686-w64-mingw32/lib/crt2.o -Lc:/strawberry/c/i686-w64-mingw32/lib -lmingw32 -lmingwex -lmsvcrt
ld ld -o $(EXECUTABLE) hello.o $(LIBS)
hello.exe
Hello World!
コード:
.data
msg: .ascii "Hello World!\0"
.text
.global _main
_main:
pushl $msg
call _puts
leave
movl $0, %eax
ret
LIBS のオプションのいずれかを削除すると、リンク プロセスが失敗するか、結果の実行可能ファイルを実行すると Windows エラーが発生します。したがって、行うべき論理的なことは、puts
呼び出しを sys_write のような単純なものに置き換えることですが、この multiplatform を行う方法がわかりません。オンラインの小さなドキュメントint 0x80
には、カーネルへの呼び出しを実行するために使用するように書かれていますが、これは Linux でのみ機能し、Windows では機能しないため、アセンブリ コードをマルチプラットフォームにしたいと考えています。