天天看点

025_ARM常用汇编指令

目录

处理器内部传输数据指令 ​

存储器访问指令​

压栈和出栈指令  (处理器的堆栈是向下增长的)​

跳转指令

算术运算指令​

逻辑运算指令​

今天主要讲解一下ARM中常用的汇编指令:

  • 处理器内部传输数据指令 
    025_ARM常用汇编指令

MOV 

MOV R0, R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1
MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12
           

MRS

MRS R0, CPSR @将特殊寄存器 CPSR 里面的数据传递给 R0,即 R0=CPSR
           

MSR

MSR CPSR, R0 @将 R0 中的数据复制到 CPSR 中,即 CPSR=R0
           
  • 存储器访问指令
    025_ARM常用汇编指令

LDR 

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=
LDR R1, [R0] @读取地址 0X0209C004 中的数据到 R1 寄存器中
           

STR 

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,
LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20
STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中
           
  • 压栈和出栈指令  (处理器的堆栈是向下增长的)
    025_ARM常用汇编指令

PUSH

PUSH {R0~R3, R12} @将 R0~R3 和 R12 压栈
           

POP

POP {LR} @先恢复 LR
POP {R0~R3,R12} @在恢复 R0~R3,R12
           
注:
STMFD 可以分为两部分: 
STM 和 FD,同理, 
LDMFD 也可以分为 LDM 和 FD。
STM 和 LDM 就是多存储和多加载,
可以连续的读写存储器中的多个连续数据。

FD 是 Full Descending 的缩写。

ARM 使用的 FD 类型
的堆栈, SP 指向最后一个入栈的数值,堆栈是由高地址向下增长的,也就是前面说的向下增长
的堆栈,因此最常用的指令就是 STMFD 和 LDMFD。 STM 和 LDM 的指令寄存器列表中编号
小的对应低地址,编号高的对应高地址
           
  • 跳转指令

025_ARM常用汇编指令

B 指令

_start:

ldr sp,=0X80200000 @设置栈指针
b main @跳转到 main 函数
           

BL 指令

push {r0, r1} @保存 r0,r1
cps #0x13 @进入 SVC 模式,允许其他中

bl system_irqhandler @加载 C 语言中断处理函数到

cps #0x12 @进入 IRQ 模式
pop {r0, r1}
str r0, [r1, #0X10] @中断执行完成,写 EOIR
           
  • 算术运算指令
    025_ARM常用汇编指令

  • 逻辑运算指令
    025_ARM常用汇编指令