Cortex-A7汇编指令篇
数据传输指令
  • 将数据从一个寄存器传递到另一个寄存器
  • 将数据从一个寄存器传递到特殊特殊寄存器
  • 将立即数传递到寄存器
  1. MOV指令
    MOV R0,R1
    MOV R0,#0X12
  2. MRS指令
    MRS RO,CPSR
  3. MSR指令
    MSR CPSR,R0
存储器访问指令

LDR R0,=0X0209C004
LDR R1,[R0]

LDR指令
LDR R0,=0X0209C004
LDR R1, [R0]

STR指令
LDR R0,=0X0209C004
LDR R1,=0X20000002
STR R1,[R0]

压栈和出栈指令

R0~R3和R12寄存器压栈
PUSH {R0~R3} 底[LR,R0,R1,R2,R3,R12]顶 向底部增长

POP {LR}
POP {R0~R3,R12}

STMFD SP!,{R0~R3,R12}
STMD SP!,{LR}

LDMFD SP!,{LR}
LDMFD SP!,{R0~R3,R12}

STM和LDM就算多存储和多加载,可以连续地读写存储器中多个连续的数据

跳转指令

  1. 直接使用跳转指令B,BL,BX等
  2. 直接向PC寄存器中写入数据

B指令会将PC寄存器的值设置为跳转目标地址。执行B指令,ARM处理器就会立即跳转到指定的目标地址。

_start:
ldr sp, = 0X80200000
b main

BL指令

BL指令相比与B指令,在跳转之前会在寄存器LR中保存当前PC的值,这就可以通过将LR寄存器的值重新加载到PC中拉

push {r0,r1}
cps #0x13 @进入SVC模式,允许其他终端再次进去

bl system_irqhandler @加载C语言中断处理函数到r2寄存器中

cps #0x12 @进入IRQ模式
pop {r0,r1}
str r0,[r1,#0x10] @中断完成,写EOIR

ADD Rd,Rn, Rm Rd = Rn + Rm
ADD Rd, Rn, #Immed
ADC Rd, Rn, Rm(带进位)
ADC Rd, Rn, #immed(带进位)
SUB Rd, Rn, Rm(带进位)
SUB Rd, #immed (带进位)
SUB Rd, Rn, #immed
SBC Rd, Rn, #immed
SBC Rd, Rm, #immed 借位

MUL Rd,Rn,Rm @32位乘法
UDIV Rd,Rn,Rm @无符号乘法
SDIV Rd,Rn,Rm @有符号除法

逻辑运算指令

AND Rd,Rn @按位与
AND Rd,Rn #immed @按位与
AND Rd,Rn,Rm

ORR Rd,Rn @按位或
ORR Rd,Rn,#immed
ORR Rd,Rn,Rm

BIC Rd,Rn @按位清除
BIC Rd,Rn,#immed
BIC Rd, Rn,Rm

ORN Rd,Rn,#immed @按位或非
ORN Rd,Rn,Rm

EOR Rd,Rn @按位异或
EOR Rd,Rn,#immed
EOR Rd,Rn,Rm