Assembly 对十六进制的ARM指令

Assembly 对十六进制的ARM指令,assembly,arm,hex,Assembly,Arm,Hex,例如,我一直在尝试将arm指令转换为包含PC寄存器的十六进制 ldr rx, [pc, #xx] 我查阅了“ARM架构参考手册”,LDR说明说明如下: 问题出现了,, 1.cond值,请参阅,LDR指令对应的cond值是0101(加号)还是其他? 2,Rd是PC寄存器,如何描述PC使用四位[15:12]一个非常简单的方法就是编写一些代码并进行反汇编,查看特定的工具链编码了什么,然后将其与文档进行比较 .globl _start _start: ldr r3,hello nop nop no

例如,我一直在尝试将arm指令转换为包含PC寄存器的十六进制

ldr rx, [pc, #xx]
我查阅了“ARM架构参考手册”,LDR说明说明如下:

问题出现了,, 1.cond值,请参阅,LDR指令对应的cond值是0101(加号)还是其他?
2,Rd是PC寄存器,如何描述PC使用四位[15:12]

一个非常简单的方法就是编写一些代码并进行反汇编,查看特定的工具链编码了什么,然后将其与文档进行比较

.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
如前所述,条件代码为1110,即“始终”。Rn是pc,Rd是r3。pc的位是19:16,而不是15:12


在本例中,所需地址为0x14,指令位于0x00。因此,对于该指令,执行时pc为0x08,因此0x14-0x08为0x0C,即偏移量编码。

ARM指令默认为无条件指令,即
1110
(也称为始终)。PC是R15,又名
1111
。感谢您的回复,我刚刚开始学习ARM指令,谢谢您的帮助。顺便说一句:上述指令的十六进制值为:1110 0101 1001 1111
e59f300c
11100101100111110011000000001100
1110 01 0 1 1 0 0 1 1111 0011 000000001100