体裁
以下は"hello, world!"を出力するhello.asmの内容である
section .data text db "Hello, world" section .text global _start ; リンカがエントリポイントを識別するために設定される ; 以下はラベル, 慣例的に_を接頭辞とする _start: mov rax, 1 ; ID: 1 --> sys_write mov rdi, 1 ; ファイルディスクリプタ, 1なので標準出力 mov rsi, text ; textはアドレスである。つまり"hello, world"が書き込まれたアドレスを指定している。 mov rdx, 12 ; 指定アドレスから読み込む文字数 syscall ; システムコール発行 ; ここからシステム終了のためのsysコールを呼ぶ mov rax, 60 ; ID: 60 --> sys_exit mov rdi, 0 ; エラーコード = 0で終了。つまり正常終了 syscall
アセンブル
nasm -f elf64 -o hello.o hello.asm
- -f: アセンブルターゲットファイルの指定
- -o: 出力ファイルの名前指定
リンク
ただ.asmをアセンブルをしただけでは実行は出来ない。リンカを用いて関連ファイルをリンクすることで初めて実行ファイルとなる。 恐らくシステムコールのラベルと命令フローを定義したファイル等をリンクしていると思われる。
ld hello.o
上記により、hello
ファイルが生成される
実行
./hello Hello, world%