用户操作
[即时聊天] [发私信] [加为好友]
pla_otoID:changli_li
3555次访问,排名2万外好友0人,关注者0
changli_li的文章
原创 5 篇
翻译 0 篇
转载 1 篇
评论 0 篇
pla_oto的公告
*******************早上起来抓住一天->行动
*******************
最近评论
文章分类
收藏
相册
我的CHINAUNIX BLOG
我的ChinaUnix Blog
喜欢的网站
arm好地方
嵌入式资讯网
友情链接
Bekars涡轮增压的Blog
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 一、ARM的寄存器学习笔记收藏

新一篇: 二、ARM 的异常处理 | 

学习ARM一段时间了,一直没有机会好好总结一下,现在放假了终于有机会理一理思路,总结一下,便于复习记忆。

arm 基础

一、ARM寄存器
无论是学习哪一种处理器,首先需要明确的就是这种处理器的寄存器以及工作模式。
ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。
1、不分组寄存器(R0-R7)
不分组也就是说说,在所有的处理器模式下指的都时同一物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用一个名字相同的物理寄存器,就是使用的同一个寄存器,这样可能造成寄存器中数据被破坏,所以在进行模式切换时必须加以保护
 
2、备份寄存器(R8-R14)
对于R8-R12来说,除在快速中断模式下,每个模式对应相同物理寄存器,所以在FIQ模式下可不必保护和恢复中断现场。 
对于R13-R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。
寄存器R13常用做栈指针SP,除用户和系统模式外,其他模式在使用时的名字构成为R13_<mode>。
寄存器R14又被称为连接寄存器(LR),除用户和系统模式外,其他模式在使用时的名字构成为R14_<mode>。
有下面两种特殊用途:
A、每个处理器模式自己的物理R14中存放在当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。
B、当异常中断发生时,该异常模式下的R14被设置成保存该模式基于PC的返回地址,对于有些异常模式,R14的值有可能与将返回的地址有个常数的偏移量,不同模式偏移量还有所不同(在ARM 的异常处理里有详细介绍)。
 
3、程序计数器R15
对于用户来说,尽量避免使用STR/STM指令来保存R15的值。当成功向R15写入一个地址数值时,程序将跳转到该地址执行。
在ARM状态下指令总是字对齐的,所以PC的PC[1:0]位恒为零,在想PC写入地址时一定要注意将PC[1:0]设为零。
ARM采用的是3级流水线结构,所以PC指向的是当前执行指令的下两条指令,PC-8为当前指令地址
 
4、程序状态寄存器
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。同时除了用户和系统模式以外,每中处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。当在用户模式和系统模式中访问SPSR,将会产生不可预知的结果。
CPSR和SPSR的格式相同,如下:
       0:M0
       1:M1
       2:M2
       3:M3
       4:M4
       5:T(=1 Thumb执行)
       6:F(=1是禁止)
       7:I(=1是禁止)

27:Q 在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,主要用于指示增强的dsp指令是否发生了溢出。同样的spsr的bit[27]位也称为q标识位,用于在异常中断发生时保存和恢复CPSR中的Q标识位。
在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标识位没有被定义

28:V 对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。
对于其他指令,V统常不发生变化。

29:C 下面分四种情况讨论C的设置方法:
在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。
在减法指令中(包括减法指令CMP),当运算中发生借位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1。
对于包含移位操作的非加减运算指令,C中包含最后一次移出位的数值。
对于其他非加减运算指令,C位的值通常不受影响。

30:Z z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。

31:N 当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正书或零。

MRS:状态寄存器到通用寄存器的传送指令。
MSR:通用寄存器到状态寄存器的传送指令。 

发表于 @ 2007年02月12日 08:46:00|评论(loading...)|编辑

新一篇: 二、ARM 的异常处理 | 

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © pla_oto