ウホウホゴリラッホ

主に勉強したことをまとめていきます。twitter:@pytran3

アセンブリ勉強記録

動機

コンパイラを書くにあたって、アセンブリの知識が無いと難しいことがわかったので平行して勉強していこうかと。
最初の目標は再帰関数でフィボナッチ数を計算することにした。

勉強したこと

おまじないたち

おまじない扱いされてそうな彼ら

.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