装配ARM指令说明

时间:2015-12-26 05:34:01

标签: assembly arm

我需要有人详细解释以下说明:

.text:000084AC                 PUSH    {R3,LR}
.text:000084AE                 LDR     R0, =0x111C
.text:000084B0                 ADD     R0, PC
.text:000084B2                 BL      sub_9354
.text:000084B6                 MOVS    R0, #1
.text:000084B8                 POP     {R3,PC}

1 个答案:

答案 0 :(得分:1)

这组特定的指令代表主程序集中的子程序。让我们逐一理解每条指令:

  

.text:000084AC PUSH {R3,LR}

PUSH <register_list>

Register_list可以来自r0-r7和LR。 PUSH在Thumb状态下将多个寄存器推送到堆栈。

PUSH - 将注册推送到堆栈

在外行术语中,您可以说&#34;输入子程序&#34;

  

.text:000084AE LDR R0,= 0x111C

LDR - 从内存中加载寄存器

LDR rd, =numeric constant
LDR     R0, =0x111C => generate LDR R0, #0x111c
  

ADD R0,PC

ADD op{S}{cond} {Rd,} Rn, Operand2

这里在你的情况下省略Rd,所以Rd = Rn。所以

R0=Program counter + R0
  

.text:000084B2 BL sub_9354

带分支的分支(BL)将旧PC写入当前银行的链接寄存器(R14)。

B{L}{cond} <expression>

是目的地。汇编程序计算偏移量。 BL - 带链接的分支 该指令强制程序计数器pc指向新地址

  

MOVS R0,#1

MOV<opcode>{cond}{S} Rd,<Op2>

MOV移动寄存器或常量

如果存在S(暗示CMP,CMN,TEQ, TST)然后将常数1移动到R0

  

POP {R3,PC}

POP - 从堆栈中弹出寄存器

在外行术语中,您可以说&#34;从子程序返回&#34;。

返回时,R3将从堆栈中弹出,并将返回地址加载到pc中。这从子程序返回。 参考来自

http://infocenter.arm.com/

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt2.pdf

ARM system Developer's Guide