回答編集履歴
2
16進数…
test
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
|
113
113
|
|
114
114
|
|
115
|
-
関数内でのスタックポインタを0とすると次のようなイメージになります。
|
115
|
+
関数内でのスタックポインタを00(16進数)とすると次のようなイメージになります。
|
116
116
|
|
117
117
|
|
118
118
|
|
@@ -128,7 +128,7 @@
|
|
128
128
|
|
129
129
|
|
130
130
|
|
131
|
-
Rは関数が呼び出される前のスタックポインタで、Sは関数内で処理されている最中のスタックポインタです。スタックは後ろから使われるため、`a`用に0C-0F、`b`用に
|
131
|
+
Rは関数が呼び出される前のスタックポインタで、Sは関数内で処理されている最中のスタックポインタです。スタックは後ろから使われるため、`a`用に0C-0F、`b`用に08-0Bが確保されます。今回の関数では00-07は使用されません。ローカル変数がもっと多ければスタックが埋まっていきますが、ARM64では16バイト毎に確保するようになっているようで、`int`が5つ以上になると32になったりします。どの区切りで確保されるかや、スタックポインタの扱い方はCPUのアーキテクチャによって異なります。あくまで、これはARM64の話であることに注意して下さい。
|
132
132
|
|
133
133
|
|
134
134
|
|
1
ARM64を選んだのはRISCだから
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
今回は、コンパイル環境の構築が容易であり、また、後述の確認サイトで使えるARM64(64bit版のARM)をターゲットにしたいと思います。ARM64のアセンブリを調べるには[ARM® コンパイラ armasm ユーザガイド バージョン 6.02](http://infocenter.arm.com/help/topic/com.arm.doc.dui0801cj/index.html)を参考にしました(でも、微妙に違うような…コンパイラがGCCだから?)。日本語版があってよかったです。
|
27
|
+
今回は、コンパイル環境の構築が容易であり、また、後述の確認サイトで使えて、一般的にRISCに分類されるCPUの一つであるARM64(64bit版のARM)をターゲットにしたいと思います。ARM64のアセンブリを調べるには[ARM® コンパイラ armasm ユーザガイド バージョン 6.02](http://infocenter.arm.com/help/topic/com.arm.doc.dui0801cj/index.html)を参考にしました(でも、微妙に違うような…コンパイラがGCCだから?)。日本語版があってよかったです。
|
28
28
|
|
29
29
|
|
30
30
|
|