tiny6410裸机实验第7章--------------异常(原理)

来源:互联网 发布:淘宝买东西到国外 编辑:程序博客网 时间:2024/05/21 11:22

【说明】

             如果我们的CPU执行到未定义的指令的时候会发生什么呢?又,如果出现了除以0的操作,又会发生什么呢?那就是“异常”,这一节就来介绍异常的相关知识。。下一章我们介绍中断,中断是异常的一种。


【工作模式】

              ARM有7种工作模式,当发生异常时会自动进入相关的模式运行,并跳转到异常向量入口处,工作模式如下

              

               1)从上看到,系统模式和用户模式使用相同的寄存器

               2)快中断模式中使用自己的R8到R12寄存器

               3)除了系统和用户模式,其他模式都有自己的R13,R14寄存器以及SPSR寄存器!

        

【异常向量入口】

                  我们说当发生异常的时候,CPU会自动跳到异常入口地址去运行,那这个异常入口地址在哪呢?

                  异常入口地址是ARM规定的,比如复位异常reset 就放在0地址,这样我们一复位,CPU就跳到0地址运行。其他的如下

                 

                 1)显然,异常向量入口就是在程序的最前面。根据ARM体系的规定,相应的异常会跳到相应的异常入口。我们就在那放相应的指令

                 2)每一条都是改变PC,也就是无条件跳转。。。。我们将真正的异常处理函数写在任何地方,在入口处跳转过去。。

                3)比如swi在这里

                               

 

【程序状态寄存器】

                       我们能否手动改变运行模式呢,可以的!运行模式保存在一个CPSR寄存器中,直接改变相应位就可以改变运行模式了。

                       

                         最后5位就是用来改变运行模式的,而指令执行后的结果放在前面4位,比如CMP指令比较结果就放在这4位。。

                        下表是工作模式对应的编号,只要直接改写CPSR低5位到相应的编号就可以改变工作模式

                        

                     

【如何改变CPSR】

                      我们说改变CPSR就可以改变运行模式,但是要如何改变CPSR呢?要改变CPSR要使用特殊的指令,而不是一般的寄存器操作指令,如下

                     

                     1)MRS  意思就是将CPSR  的值赋 给R0寄存器,

                     2)然后将R0后低5位设置成10000,由上面的表我们知道是用户模式,

                     3)MSR就是将寄存器的值赋给CPSR

 

【SWI指令】

                    SWI指令可以使系统发生SWI异常,进入管理模式并跳转到相应的异常入口运行

                    操作系统中用这条指令来进行系统调用

            1】硬件会干下面几件事情

                    1)CPU进入SVC模式

                    2)CPSR赋给SPSR_SVC

                    3)切换R13,R14到SVC的R13, R14

                    4)SWI指令的下一条指令地址保存到R14

                    5)跳到地址8(异常入口地址)运行

            2】软件要干

                    1)在地址8放一条跳转指令

                    2)保存现场

                    3)处理异常

                    4)恢复现场

0 0
原创粉丝点击