部分ARM汇编指令解读

Posted wenhao-web

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部分ARM汇编指令解读相关的知识,希望对你有一定的参考价值。

一、LDR(Load Register  加载寄存器)将存储器地址所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。

  例:

/* 将Reset_Handler函数的地址加载到pc寄存器中 */
ldr pc, =Reset_Handler
/* 将Reset_Handler函数的地址加载到r0寄存器中*/
ldr r0, =Reset_Handler

二、BX(Branch and Exchange 分支和交换)指令跳转到指令中所指定的目标地址,若目标地址的bit[0]为0,则跳转时自动将CPSR中的标志位T复位,即把目标地址的代码解释为ARM代码;若目标地址的bit[0]为1,则跳转时自动将CPSR中的标志位T置位,即把目标地址的代码解释为Thumb代码。

  例:

/* 以下指令的作用是在函数Reset_Handler中一直循环 */
Reset_Handler:
  ldr r0, =Reset_Handler
  bx r0

三、MRC读CP15(C0-C15)寄存器

  MRC{cond} p15, <opc1>, <Rt>, <CRn>, <CRm>, <opc2> 

  1. cond:指令执行的条件码,如果忽略的话就表示无条件执行 ;
  2. opc1:协处理器要执行的操作码 ;
  3. RtARM 源寄存器,要写入到 CP15 寄存器的数据就保存在此寄存器中 ;
  4. CRnCP15 协处理器的目标寄存器;
  5. CRm: 协处理器中附加的目标寄存器或者源操作数寄存器,如果不需要附加信息就将;
    CRm 设置为 C0,否则结果不可预测;
  6. opc2: 可选的协处理器特定操作码,当不需要的时候要设置为 0 。

例:

MRC p15, 0, r0, c0, c0, 0 ;将 CP15 中 C0 寄存器的值读取到 R0 寄存器中

四、MCR写CP15(C0-C15)寄存器

  MCR{cond} p15, <opc1>, <Rt>, <CRn>, <CRm>, <opc2> 

  同上。

例:

ldr r0, =0X87800000     ; r0=0X87800000 MCR p15, 0, r0, c12, c0, 0 ;将 r0 里面的数据写入到 c12 中,即 c12=0X87800000 

五、 ADD(add 加)不带进位的加法指令,指令完成目的操作数与源操作数相加,将结果存回目标操作数。

例:

MRC p15, 4, r1, c15, c0, 0   ;获取 GIC 基地址 
ADD r1, r1, #0X2000       ;GIC 基地址加 0X2000 得到 CPU 接口端寄存器起始地址 
LDR r0, [r1, #0XC]        ;读取 CPU 接口端起始地址+0XC 处的寄存器值,也就是寄存器     
                  ;GIC_IAR 的值

 

 

 

 

 

  

以上是关于部分ARM汇编指令解读的主要内容,如果未能解决你的问题,请参考以下文章

如何实现对ARM汇编指令的调试?

c语言转化为arm汇编指令

ARM汇编指令特点

arm汇编

嵌入式:ARM内嵌汇编及C和ARM汇编相互调用

ARM - 如何从 C 函数中执行单个汇编指令(机器代码)