プログラミング言語を作る。第2回:x86-64アセンブリ
コンパイラを作るには、手順としては最初にする必要は無いでしょうが、アセンブリの事を分かっていないとあまりイメージが湧きにくい気がします。
そのようなわけで、まずはアセンブリプログラミングをしてみようと思います。
私が使っている多くのパソコンのプロセッサは Intel core i7 が多くを占めているので、x86-64の命令セットでアセンブリを書こうと思います。
アセンブリプログラミングは、大学の講義で Power PC の命令セットで行ったことがあるので、全くの未経験というわけではありません。
しかし、何度か x86 のアーキテクチャは複雑といわれているらしく、実際に自分が何度かアセンブリを見てみてもあまり理解ができませんでした。
気を取り直して、もう一度 x86 アセンブリに挑戦してみようと思います。
今回は NASM を使います。インターネット上で得られる情報が NASM のほうが多いと思ったからです。
まずは Hello, world! プログラムを書きます。今回は下記のウェブサイトを参考にしました。
Assembly Programming on x86-64 Linux (01)
bits 64 section .text global _start _start: mov rax, 1 mov rdi, 1 mov rsi, msg mov rdx, len syscall mov rdi, 0 mov rax, 60 syscall section .data msg db 'Hello, world!', 0x0A len equ $ - msg
rax に使用する system call に対応する番号を代入し、引数も同様に特定のレジスタに与えて syscall を呼びます。このプログラムで使ったのは write と exit です。
nasm -f elf64 a.s ld a.o ./a.out
これを実行することで Hello, world! が出力されます。