アセンブリ勉強記録
動機
コンパイラを書くにあたって、アセンブリの知識が無いと難しいことがわかったので平行して勉強していこうかと。
最初の目標は再帰関数でフィボナッチ数を計算することにした。
勉強したこと
おまじないたち
おまじない扱いされてそうな彼ら
.intel_syntax noprefix
INTEL記法で書きますよ!という宣言。noprefixとはどういう意味だろうか。。。
.blobl main
アセンブリ上でのブローバルな変数、関数を宣言している。
mul
対応するAレジスタと掛け算を実行して、そのAレジスタに格納する。
addと違う書き方になる。物理的な回路の制約からこうなっているのだろうか・・・?
call
引数の関数(ラベル?)にジャンプする。retで一つ前のcallにジャンプするのを忘れない。retではスタックを一つ戻したりしてるらしい。
今日書いたコード
掛け算と関数呼び出しを実装した。 ださい関数名してるけど、衝突しにくいから良い命名規則な気がする。
.intel_syntax noprefix .globl main kakeru: mov rdx, rdi mov rax, rsi mul rdx mov rax, rax ret main: mov rdi, 13 mov rsi, 2 call kakeru ret