#この記事について
この記事は僕がアセンブリ言語に興味を持ち、理解したことをメモ程度に書く記事です。
勿論誤ったことを記述することが多くあると思うので、それを楽しむ程度に見てくれると幸いです。
なんでARMなのって思うかもしれませんが、手元に気軽に検証でそうなのがラズパイくらいだったからです
基本は以下のリンクを参考にさせてもらっています。
[アセンブラ] ARMの仕様を見てみる
#レジスタ
32bit の r0
から r15
までの16個
-
r0
〜r13
までは汎用レジスタ -
r13
-- スタックポインタ -
r14
-- リンクレジスタ -
r15
-- プログラムカウンタ
別名など
レジスタ | 別名 | レジスタ | 別名 | |
---|---|---|---|---|
r7 | wr | r12 | ip | |
r9 | sb | r13 | sp | |
r10 | sl | r14 | lr | |
r11 | fp | r15 | pc |
#諸々
@
でコメントアウト
[r1]
とかの括弧くくりはメインメモリ上のアドレスのこと
#
は即値(ただの値)
#命令
基本的に以下の構文
命令 デスティネーション 第1オペランド 第2オペランド
###mov
レジスタ間で値を代入する。
レジスタに直接値を代入する場合はmovt
を併用して上位16bitと下位16ビットで分けて代入するらしい。
mov r1, r2 @ r1 <- r2
###add / sub
デスティネーションに第1と第2オペランドを足したもの/引いたものが代入される。
add r1, r2, r3 @ r1 = r2 + r3
sub r1, r2, r3 @ r1 = r2 - r3
###ldr / str
ldr
はオペランドに指定されたアドレスの値を、デスティネーションレジスタに代入する。
str
はデスティネーションレジスタの値を、オペランドに指定されたアドレスに書き込む。
ldr r4, [r10] @ r4 <- [r10]
str r4, [r10] @ r4 -> [r10]
###push / pop
近いうちに書きます
...
とりあえずこんだけでも、少しはニーモニックが読めた!
また色々理解できたら記述していこうと思います