回答編集履歴

1

補足の質問を受けて追記

2019/01/24 12:54

投稿

dodox86
dodox86

スコア9254

test CHANGED
@@ -11,3 +11,27 @@
11
11
 
12
12
 
13
13
  ARM系CPUは設定次第でどちらにもなれるはずです。
14
+
15
+
16
+
17
+ ---
18
+
19
+ **補足情報(?)を受けて追記**:2019-01-24 21:54
20
+
21
+
22
+
23
+ > `bx r4` という分岐命令があるので、これはr4はアドレスという扱いで間違いないでしょうか。
24
+
25
+
26
+
27
+ ARMのWEBサイトにリファレンスがあるので、そちらを見ましょう。
28
+
29
+ [ARM 命令と Thumb 命令 > BX](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489ij/CIHGJAEJ.html)
30
+
31
+
32
+
33
+ 「Rm 分岐先アドレスを保持するレジスタを指定します。」と説明されているので、`r4`レジスターの内容をアドレスとして分岐します。
34
+
35
+
36
+
37
+ ただ、ここで`BX`命令の面白い(注意しなければならない)ところは、命令セットの切り替えも同時に行える、というところです。Rm(ここでは`R4`)レジスターのビット0の値によって、分岐後にARM命令かまたはThumb(サム)命令で動き始めるそうです。Thumb命令とは簡単に言うとフルスペックのARM命令ではなく、命令長や機能を削減して、組み込み用途のような制限のある状況で動くに適したARM系CPUの命令セットのことです。昔のARM CPUにはありませんでしたが、組み込み用途の軽量ARM(Cortex-M系)CPUの出現で出てきたような気がします。