ARM CPU¶
- 目次
- ARM CPU
ARMプロセッサは、RISC方式のCPUで組込み機器、スマートフォン、Apple PCなどに採用されています。
ARM社がARMの命令セットおよび設計をライセンスし、様々な会社がライセンスを受けてARMプロセッサを製造しています。
AArch64命令セット¶
レジスタ¶
汎用レジスタ¶
- 64bit汎用レジスタを31個:x0~x30
- 32bit値を格納するときは上位32bitがゼロクリア、w0~w30と呼ぶ
スタックポインタ¶
ゼロレジスタ¶
プログラムカウンタ¶
フラグレジスタ(NZCV)¶
浮動小数点レジスタ¶
- 128bitレジスタを32個、v0~v31
- 64bitとして使用するときは、d0~d31
FPCRレジスタ¶
命令¶
命令長は32bit固定、演算はレジスタ間で即値は扱いません。
演算命令では3オペランド。
転送¶
- MOV <宛先レジスタ>, <レジスタ | 即値>
レジスタの値または即値を宛先レジスタにコピー - STR <対象レジスタ>, [<レジスタ|SP>, #オフセット]
対象レジスタの値をメモリにコピー。メモリはレジスタまたはSPのアドレスにオフセットを加えた場所。 - LDR <宛先レジスタ>, [<レジスタ|SP>, #オフセット]
メモリからレジスタにコピー
算術演算¶
- ADD <宛先レジスタ> <被加数レジスタ> <加数レジスタ|即値>
- SUB <宛先レジスタ> <被減数レジスタ> <減数レジスタ|即値>
- MUL <宛先レジスタ> <被乗数レジスタ> <乗数レジスタ>
- SDIV <宛先レジスタ> <被除数レジスタ> <除数レジスタ>
符号付き除算 - UDIV <宛先レジスタ> <被除数レジスタ> <除数レジスタ>
符号無し除算
- AND
- ORR
- EOR
- LSL
- LSR
- ASR
C言語のコンパイル¶
関数¶
引数と戻り値¶
引数は8個まではレジスタ(x0~x7、浮動小数点数はv0~v7)に詰められて渡されます。9個目からはスタック経由となります。
戻り値は x0 または v0 レジスタに詰めた値が返されます。