ARM SWI 软中段 例程

自己做了ARM的SWI软中断后,真有种醍醐灌顶的感觉,对安装中断、对DCD的用法、对堆栈的操作、对CPSR和SPSR、对PC的读入,畅快淋漓啊!

 

一、安装中断

ARM中断和51有些像,触发中断后会跳到中断地址。只不过ARM的只有4字节,只够存一个跳转指令,然后就是下一个中断地址了,51的大一些。

在写时,一直想着怎么去跳转。因为51有ORG伪指令,可以用来定义地址,可ARM的没有。这个让我走到思维定势里了,终于在看一个PPT时,发现只要从开始写指令就行了。反正第一个是复位中断,要跳到主程序处。有时一个很简单的东西就是这样困扰你的。回想一下,老师上课也讲了,只是我没有在意,以为很简单的。


二、DCD的用法

在程序代码段中,可以用DCD指令来存储标号地址,这样连续的就方便SWI参数判断与执行了。

 

 

三、对堆栈的操作

四种情况:

 

向上生长:向高地址方向生长,称为递增堆栈 

向下生长:向低地址方向生长,称为递减堆栈 

堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个要

放入的空位置,称为空堆栈。这样就有 4 中类型的堆栈表示递增和递减的满堆栈和空堆

栈的各种组合。 

 

 

(1)满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的 最高地址。指令如 LDMFA,STMFA 等。 (2)空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空 位置。指令如 LDMEA,STMEA 等。

 

没有什么特别的,就是给SP寄存器赋个内存地址,然后决定怎么用。

 

(3)满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最

低地址。指令如 LDMFD,STMFD 等。 

(4)空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空

位置。指令如 LDMED,STMED 等。

 

 

 

四、CPSR和SPSR

CPSR意思为Current Program Statuse Register,即,当前程序状态寄存器。SPSR是在中断异常时CRSP的备份。

 

五、对PC的读入

由于ARM中流水线的作用,当在一条指令中读取PC的值时,这个PC指的已经是当前指令的地址+8了,即当前指令后第二条指令的地址,这个对中断跳转时有用。

 

 

 

其实还有很多的感受,确实当你仔细转进去去研究一个问题是,就会有很大的收获,毕竟要在一方面做到专,正所谓“不可以一物不专,不可只专一物。”用心去做,才叫学习。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值