目录
9.1状态寄存器传送指令
@ 1.4 状态寄存器传送指令:访问(读写)CPSR寄存器
@ 读CPSR
MRS R1, CPSR
@ R1 = CPSR
@ 写CPSR
MSR CPSR, #0x10
@ CPSR = 0x10
@ 在USER模式下不能随意修改CPSR,因为USER模式属于非特权模式
MSR CPSR, #0xD3
CPSR复位后的默认状态0xD3, svc模式(刚上电时svc,FIQ与IRQ禁止)-user模式-svc模式
9.2软中断指令
@ 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状态的恢复
9.3协处理器指令
1.6 协处理器指令:操控协处理器的指令
1.协处理器数据运算指令
CDP
2.协处理器存储器访问指令
STC 将协处理器中的数据写入到存储器
LDC 将存储器中的数据读取到协处理器
3.协处理器寄存器传送指令
MRC 将协处理器中寄存器中的数据传送到ARM处理器中的寄存器
MCR 将ARM处理器中寄存器中的数据传送到协处理器中的寄存器
9.4伪指令
2.伪指令:本身不是指令,编译器可以将其替换成若干条等效指令
空指令,浪费了CPU时间
NOP
指令
LDR R1, [R2]
将R2指向的内存空间中的数据读取到R1寄存器
伪指令
LDR R1, =0x12345678 @R1 = 0x12345678
LDR伪指令可以将任意一个32位的数据放到一个寄存器
LDR R1, =STOP
将STOP表示的地址写入R1寄存器
LDR R1, STOP
将STOP地址中的内容写入R1寄存器
作业
1.编程实现通过状态寄存器传送指令,将ARM处理器的模式修改成USER模式并将FIQ与IRQ使能
2.简述伪指令和指令的本质区别是什么
答:
1.
.text
.global _start
_start:
MRS R1,CPSR @R1=CPSR
MSR CPSR,#0x10 @模式修改成USER模式并将FIQ与IRQ使能,CPSR寄存器(00010000)(0x10)
STOP:
B STOP
.end
2.
指令是控制程序运行时的机器代码运作的,是CPU执行的依据,编程、编译、执行都是有效的。 伪指令本身不是指令,编译器可以将其替换成若干条等效指令,编译完成后,伪指令的作用也就消失了。