ARM指令到十六进制

时间:2014-08-14 16:02:00

标签: assembly arm hex

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

ldr rx, [pc, #xx]

我已经检查过" ARM体系结构参考手册",LDR指令的描述如下: enter image description here

出现问题,     1. cond值,参见Instruction Format,LDR指令对应的cond值是0101(PLUS)还是?     2,Rd是PC寄存器,如何描述PC使用四位[15:12]

1 个答案:

答案 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,即偏移编码。