KDOC 129: 『ポインタ理解のためのアセンブリ入門』
この文書のステータス
- 作成
- 2024-03-29 貴島
- レビュー
- 2024-04-27 貴島
概要
RISC-Vから学ぶC言語 ポインタ理解のためのアセンブリ入門は、C言語をアセンブリで解説する本である。C言語やポインタといいつつ、紙幅のほとんどは前提知識となる命令セットやアセンブリの解説である。
感想
条件文、ポインタ、配列、構造体などのプリミティブのコードと生成アセンブリを比較する流れはとても良かった。解説はあっさりしているが、実際に比較してみて考えてみるとわかる。一度では腑に落ちなかったが、何度か行ったり来たりしたら理解できた。50ページほどしかないのはむしろよく、圧倒されなかった。
例コードをCompiler Explorerに通して、アセンブリとコードを読んでみてから解説を読んでいった。対応部分が色分けされているのは本当にわかりやすい。
メモ
bne
命令。「等しくなければジャンプする」==「等しければジャンプしない」- メモリの図は上にいくほど小さい 。-60と-40では、-60が上にある
- 流れ
- 最初にスタックポインタ(sp)をマイナスにしてスタック領域を確保する
- スタックの下の方に、レジスタの値を退避させる。元の関数フレームの基準点など
- spからもっとも離れたスタックの底をフレームポインタ(s0)とする
- s0からのオフセットでメモリアクセスする
- 本処理をいろいろやる
- 関数呼び出しが終わったらメモリに退避させていた関数フレームの基準点をフレームポインタ(s0)に戻し、呼び出し先に戻る
- a0は戻り値を格納するレジスタ
↓条件文。
↓配列。
↓ポインタ。
addi a5,s0,-24
でアドレスを求めている。
↓構造体。
関連
- KDOC 45: プログラミング言語の内部的な違いをアセンブリから調べる。で触れたときはあやふやな理解のままだった