LoginSignup
0
1

More than 3 years have passed since last update.

ラズパイでARM入門(2. レジスタと基本的な算術演算)

Last updated at Posted at 2020-11-28

前回: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
/* -- 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
/* -- 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

となります。

今日はここまで。

次回:3. メモリ、アドレス、ロード・ストア

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1