一、状态寄存器传送指令
状态寄存器传送指令:访问(读写)CPSR寄存器
@ 读CPSR
MRS R1, CPSR
@ R1 = CPSR
@ 写CPSR
MSR CPSR, #0x10
@ CPSR = 0x10
@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
MSR CPSR, #0xD3
二、软中断指令
软中断指令: 触发软中断异常
SWI #1
@ 设置异常向量表的地址
B MAIN
B .
B SWI_HANDLER
B .
B .
B .
B .
B .
@ 应用程序
MAIN:
MOV SP, #0x40000020
初始化SVC模式下的栈指针,因为程序刚启动时模式为SVC模式
MSR CPSR, 0x10
@ 切换成user模式,开启FIQ、IRQ
MOV R1, #3
MOV R2, #5
SWI #1
@ 触发软中断模式
ADD R3, R1, R2
B STOP
@ 异常处理程序
SWI_HANDLER:
STMFD SP!, {R1, R2, LR}
@ 压栈保护现场
MOV R1, #4
MOV R2, #5
MUL R3, R1, R2
LDMFD SP!, {R1, R2, PC}^
@ 出栈恢复现场
@ 将压入到栈中的LR(返回地址)出栈给PC,实现程序的返回
@ ‘^’表示出栈的同时将SPSR的值传递给CPSR,实现CPU状态的恢复
STOP:
B STOP
三、协处理器指令
协处理器指令: 操控协处理器的指令
@ 1.协处理器数据运算指令
CDP
@ 2.协处理器存储器访问指令
STC @ 将协处理器中的数据写入到存储器
LDC @ 将存储器中的数据读取到协处理器
@ 3.协处理器寄存器传送指令
MRC @ 将协处理器中寄存器中的数据传送到ARM处理器中的寄存器
MCR @ 将ARM处理器中寄存器中的数据传送到协处理器中的寄存器
四、伪指令
伪指令: 本身不是指令,编译器可以将其替换成若干条等效指令
@ 空指令
NOP
@ 指令
LDR R1, [R2]
@ 将R2指向的内存空间中的数据读取到R1寄存器
@ 伪指令
LDR R1, =0x12345678
@ R1 = 0x12345678
@ LDR伪指令可以将任意一个32位的数据放到一个寄存器
LDR R1, =STOP
@ 将STOP表示的地址写入R1寄存器
LDR R1, STOP
@ 将STOP地址中的内容写入R1寄存器