状态寄存器传送指令
- CPSR寄存器
状态寄存器传送指令:访问(读写)CPSR寄存器
@ 读CPSR
@ MRS R1, CPSR
@ R1 = CPSR
@ 写CPSR
@ MSR CPSR, #0x10 @0x10为User模式,且开启IRQ和FRQ
@ CPSR = 0x10
@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
@ MSR CPSR, #0xD3
软中断指令
-
ARM异常源
-
ARM异常模式
-
异常向量表
-
ARM异常响应
-
异常返回
-
异常响应代码如下:
状态寄存器传送指令:访问(读写)CPSR寄存器
@ 读CPSR
@ MRS R1, CPSR
@ R1 = CPSR
@ 写CPSR
@ MSR CPSR, #0x10 @0x10为User模式,且开启IRQ和FRQ
@ CPSR = 0x10
@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
@ MSR CPSR, #0xD3
@ 1.5 软中断指令:触发软中断
@ 异常向量表
@ B MAIN
@ B .
@ B SWI_HANDLER
@ B .
@ B .
@ B .
@ B .
@ B .
@ 应用程序
@ MAIN:
@ MOV SP, #0x40000020
@ 初始化SVC模式下的栈指针
@ MSR CPSR, #0x10
@ 切换成USER模式,开启FIQ、IRQ
@ MOV R1, #1
@ MOV R2, #2
@ SWI #1
@ 触发软中断异常
@ ADD R3, R2, R1
@ B STOP
@ 异常处理程序
@ SWI_HANDLER:
@ STMFD SP!,{R1,R2,LR}
@ 压栈保护现场
@ MOV R1, #10
@ MOV R2, #20
@ SUB R3, R2, R1
@ LDMFD SP!,{R1,R2,PC}^
@ 出栈恢复现场
@ 将压入到栈中的LR(返回地址)出栈给PC,实现程序的返回
@ ‘^’表示出栈的同时将SPSR的值传递给CPSR,实现CPU状态的恢复
协处理器指令
- 协处理器指令:操控协处理器的指令
@ 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寄存器