teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足の質問を受けて追記

2019/01/24 12:54

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -4,4 +4,16 @@
4
4
 
5
5
  メモリに格納された状態で、下位アドレスから見て0x7c, 0xc6, 0x00, 0x18 になっているものをレジスターにロードすると0x7cc60018になるのがビッグエンディアン(Big Endian)で、0x1800c67cになるのがリトルエンディアン(Little Endian)です。
6
6
 
7
- ARM系CPUは設定次第でどちらにもなれるはずです。
7
+ ARM系CPUは設定次第でどちらにもなれるはずです。
8
+
9
+ ---
10
+ **補足情報(?)を受けて追記**:2019-01-24 21:54
11
+
12
+ > `bx r4` という分岐命令があるので、これはr4はアドレスという扱いで間違いないでしょうか。
13
+
14
+ ARMのWEBサイトにリファレンスがあるので、そちらを見ましょう。
15
+ [ARM 命令と Thumb 命令 > BX](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489ij/CIHGJAEJ.html)
16
+
17
+ 「Rm 分岐先アドレスを保持するレジスタを指定します。」と説明されているので、`r4`レジスターの内容をアドレスとして分岐します。
18
+
19
+ ただ、ここで`BX`命令の面白い(注意しなければならない)ところは、命令セットの切り替えも同時に行える、というところです。Rm(ここでは`R4`)レジスターのビット0の値によって、分岐後にARM命令かまたはThumb(サム)命令で動き始めるそうです。Thumb命令とは簡単に言うとフルスペックのARM命令ではなく、命令長や機能を削減して、組み込み用途のような制限のある状況で動くに適したARM系CPUの命令セットのことです。昔のARM CPUにはありませんでしたが、組み込み用途の軽量ARM(Cortex-M系)CPUの出現で出てきたような気がします。