我一直试图将arm指令转换为包含PC寄存器的十六进制,例如
ldr rx, [pc, #xx]
我已经检查过" ARM体系结构参考手册",LDR指令的描述如下:
出现问题, 1. cond值,参见Instruction Format,LDR指令对应的cond值是0101(PLUS)还是? 2,Rd是PC寄存器,如何描述PC使用四位[15:12]
答案 0 :(得分:1)
解决这个问题的一个非常简单的方法是编写一些代码并进行反汇编,查看特定工具链编码的内容,然后将其与文档进行比较......
.globl _start
_start:
ldr r3,hello
nop
nop
nop
nop
hello: .word 0x1234
给出了
00000000 <_start>:
0: e59f300c ldr r3, [pc, #12] ; 14 <hello>
4: e1a00000 nop ; (mov r0, r0)
8: e1a00000 nop ; (mov r0, r0)
c: e1a00000 nop ; (mov r0, r0)
10: e1a00000 nop ; (mov r0, r0)
00000014 <hello>:
14: 00001234 andeq r1, r0, r4, lsr r2
有问题的指示
e59f300c
11100101100111110011000000001100
1110 01 0 1 1 0 0 1 1111 0011 000000001100
如上所述,条件代码是1110,它是&#34; ALways&#34;。 Rn是pc,Rd是r3。电脑是在19:16而不是15:12。
在这种情况下,所需地址为0x14,指令为0x00。因此,对于该指令,pc在执行时为0x08,因此0x14-0x08为0x0C,即偏移编码。