プロジェクト

全般

プロフィール

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 レジスタに詰めた値が返されます。


20日前に更新