ARM架构--专用指令

状态寄存器专用指令

CPSR寄存器-N Z C V

ARM架构--专用指令_第1张图片ARM架构--专用指令_第2张图片

ARM架构--专用指令_第3张图片

T为0时   为ARM状态

F为0时  为开启FIQ状态

I为0时  为开启IRQ状态

图1

ARM架构--专用指令_第4张图片

图2

一开始都是SVC指令,因为在操作系统启动的时候,在做一些初始化的操作,不允许被打断

ARM架构--专用指令_第5张图片

         图3

复位后CPSR寄存器为0xD3----10011(SVC)

只有状态寄存器传送指令可以修改CPSR寄存器

ARM架构--专用指令_第6张图片

图4

0x10 为user模式

ARM架构--专用指令_第7张图片

图5

0001 0000转成16进制为 0x10

并且开启了FIQ IRQ            状态为ARM状态 

user模式为非特权模式(见图2),无法向其他模式进行转变  ,结果见图6

ARM架构--专用指令_第8张图片

图6

注:1.状态寄存器传送指令在C语言中无对应语句

       2.多用于操作系统内部,系统调用场合应用较多

作业:

编程实现通过状态寄存器传送指令,将ARM处理器的模式修改成USER模式并将FIQ与IRQ使能

MSR CPSR,#0x10

软中断指令

ARM架构--专用指令_第9张图片

图7

软中断指令会使CPU进入  SVC模式

图 8

异常向量表里一种存放   异常处理程序的一条  跳转指令

ARM架构--专用指令_第10张图片

受到软中断指令后,进入SVC模式,cpsr寄存器-> 100 10011->禁止了IRQ中断

ARM架构--专用指令_第11张图片

main函数占用了 异常向量表的地址

ARM复位以后,pc的值就是0x00000000,执行B.

B . 表示死循环

修改为以下:将main函数放在异常向量表之后

B main  表示复位以后执行主程序

ARM架构--专用指令_第12张图片

软中断指定pc跳转到0x08,原因见图八

ARM架构--专用指令_第13张图片

428行   存储的是svc模式下的sp ,432行又触发后进入SVC模式,是正确的,若428和429互换,则sp存储的是user模式下的cpsr,则错误

什么模式下用什么模式下的cpsr

ARM架构--专用指令_第14张图片

跳转程序需注意压栈和出栈

ARM架构--专用指令_第15张图片

异常返回:

ARM架构--专用指令_第16张图片

下图可直接实现:1.LR的值传给PC  2.SPSR_(SVC)存储的值返回给CPSR

ARM架构--专用指令_第17张图片

完整代码:  39:00-42:00

ARM架构--专用指令_第18张图片ARM架构--专用指令_第19张图片

软中断在C语言中无对应语句!

你可能感兴趣的:(arm开发)