いつもお世話になっております。
Armのアセンブリ語のロード命令について質問です。
ldr r4,[r1,#36]
この命令について自分は、「r1に入ってるアドレスに36を足されたアドレスにある命令orデータがr4に入れられる。」というように考えていました。
指しているアドレスr1,#36に格納されていたのは、opcodeが0x7cc60018の
stmdane r0 {r2,r3,r4,r5,r6,r9,r10,lr,pc}
という命令でした。(この命令はr0をベースアドレスにr2,r3...をまとめてメモリに書き込むという命令と捉えています。)
ですが、ldr命令を実行したところ、上記のopcodeがr4に入るかなと思っていたのですが、実際には0x1800c67cという予想とは異なる値が格納されていました。
その後のコードからどうやら、r4に入っていたそれはアドレスのようですが、ではアドレスが入るなら0x2002c128がそのまま入るべきではないかとも考えました。
考え方で正しくないところがあると思うのでご指摘いただきたいです。
よろしくお願いいたします。
補足情報
ldrの次の行に
bx r4
という分岐命令があるので、これはr4はアドレスという扱いで間違いないでしょうか。
r4にはデータが読み込まれるというイメージだったので、少し混乱しています。
stmdaneがアドレスを生成しているのでしょうか...
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/24 12:05
2019/01/24 12:46
2019/01/24 12:58 編集
2019/01/24 13:19