Edited at

アセンブラ入門メモ(ARM)

More than 1 year has passed since last update.


この記事について

この記事は僕がアセンブリ言語に興味を持ち、理解したことをメモ程度に書く記事です。

勿論誤ったことを記述することが多くあると思うので、それを楽しむ程度に見てくれると幸いです。

なんでARMなのって思うかもしれませんが、手元に気軽に検証でそうなのがラズパイくらいだったからです

基本は以下のリンクを参考にさせてもらっています。

[アセンブラ] ARMの仕様を見てみる


レジスタ

32bit の r0 から r15までの16個


  • r0r13までは汎用レジスタ


  • 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

近いうちに書きます

...



とりあえずこんだけでも、少しはニーモニックが読めた!

また色々理解できたら記述していこうと思います