025_ARM常用汇编指令
程序员文章站
2022-07-03 14:40:39
...
目录
今天主要讲解一下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
-
存储器访问指令
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 中所保存的地址中
-
压栈和出栈指令 (处理器的堆栈是向下增长的)
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 的指令寄存器列表中编号
小的对应低地址,编号高的对应高地址
-
跳转指令
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
-
算术运算指令
-
逻辑运算指令
上一篇: 类加载器ClassLoader