前回:1. イントロダクション 次回:3. メモリ、アドレス、ロード・ストア
目次(記事一覧)
※この記事はRoger Ferrer IbáñezさんのブログARM assembler in Raspberry Pi – Chapter 2の翻訳です。
レジスタ
根本的に、コンピューターのプロセッサーはパワフルな計算機に他なりません。計算は、レジスタと呼ばれる非常に小さなメモリに格納されている値を使用してのみ実行できます。Raspberry PiのARMプロセッサーには、16個の整数レジスタと、32個の浮動小数点レジスタがあります。プロセッサーはこれらのレジスタを使って、整数計算や浮動小数点計算を実行します。浮動小数点レジスタは後々の記事にとっておき今は整数レジスタの説明をしましょう。
ARMの16個の整数レジスタにはr0
からr15
までの名前が与えられています。1つのレジスタは32ビットを保持できます。もちろんこれらの32ビットは自由にエンコードできます。とはいえ、整数計算を実行する命令は2の補数でエンコードされていることを想定しているため、整数は2の補数で表すと便利です。したがって、ここからは特に明記されていない限り、レジスタが含む整数値は2の補数でエンコードされているとみなします。
レジスタのr0
からr15
はすべてが同じように使用されるわけではありませんが、今のところは気にしないようにします。記事で行われることは問題ないと思ってください。
基本的な算術計算
ほとんどのプロセッサーは、整数レジスタを使って基本的な算術計算を実行できます。ARMプロセッサーもしかりです。例えば2つのレジスタの足し算ができます。第1章のサンプルコードを作り直ししてみましょう。
/* -- sum01.s */
.global main
main:
mov r1, #3 /* r1 ← 3 */
mov r2, #4 /* r2 ← 4 */
add r0, r1, r2 /* r0 ← r1 + r2 */
bx lr
このプログラムをコンパイルして実行すると、予想どおり、エラーコードは7になります。
$ ./sum01 ; echo $?
7
命令中に2回レジスタ(r0
)を使っても問題ありません。
/* -- sum02.s */
.global main
main:
mov r0, #3 /* r0 ← 3 */
mov r1, #4 /* r1 ← 4 */
add r0, r0, r1 /* r0 ← r0 + r1 */
bx lr
予想通り、
$ ./sum02 ; echo $?
7
となります。
今日はここまで。