0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

arm64 プログラミング

Last updated at Posted at 2022-08-01

x86_64: x86_64 プログラミング

文法

mov w0, #5

右から左に代入される。

メモリアクセス

[x0] はx0のアドレスのメモリを読む。Arm64 Assembly Languageの「A64 メモリアドレッシング」のところを見てしまうのが早い。

レジスタ

  • 汎用レジスタ: 64bit 29個。X0-X29 (64bit) または W0-W28 (32bit)。
  • フレームポインタ(FP): 汎用レジスタX29
  • リンクレジスタ(LR): 汎用レジスタX30。関数呼出命令(BL)の実行後、戻り番地が入る。
  • スタックポインタ(SP): 汎用レジスタX31。16バイトalign。
  • FPUレジスタ: 128bit 32個。V0-V31 (128bit)。FPU命令からは64-bit以下でしかアクセスできない。 D0-D31(64bit), F0-F31(32bit), H0-H31(16bit), B0-B31(8bit)。

プレフィクス

  • X: 64bit (例: X0)
  • W: 32bit (例: W0)

スタック

TODO

関数呼び出し

  • 関数呼出しでは、整数の実引数は8個まではレジスタ(X0-X7 or W0-W7)に入れて、それ以上はスタックに積んで渡す。
  • 関数呼出しでは、実数の実引数は8個まではレジスタ(V0-X7)に入れて、それ以上はスタックに積んで渡す。
  • 関数呼出の返り値はX0 (W0) に入れて返す。構造体を返す場合は、構造体のアドレスをX8に入れて返す。浮動小数点数の場合は V0に入れて返す。
  • 関数呼出しでは、X0-X18の値は保存されない(volatile)。X19-X29とSP(X31)は保存する必要がある(non-volatile)。
  • 関数呼出しでは、V0-X7およびV16-V31の値は保存されない(volatile)。V8-V15は保存する必要がある(non-volatile)。

命令

TODO

命令サフィックス

TODO

開発環境

実行方法

a.s
.globl _main
.p2align 2
_main:
    mov	w0, #0
    ret
$ clang a.s
$ ./a.out
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?