电气知识|ARM内部寄存器

   更新日期:2017-03-26     来源:建材之家    作者:安防之家    浏览:47    评论:0    
核心提示:在ARM7TDMI处理器内部有37个用户可见的寄存器。 在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同. 所有的37个寄存器,分成两大类:(1)31个通用32位寄存器;(2)6个状态寄存器。 在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。

步阳防盗门

推荐简介:步阳集团有限公司,防盗门-室内门十大品牌,入户门-防火门十大品牌,国家建设部防盗防火安全门定点生产企业,中国大企业集团竞争力500强,中国较有成长力民营企业100强,浙江省***示范企业,以门业、车业、置业汽车零部件、物流五大支柱产业为主的大企业集团步阳集团创立于1992年,经过十多年不断发展,形成步阳门业、步阳车业、步阳置业、步阳汽车零部件、步阳物流为主的五大支柱产业。集团目前占地面积45万平方......
安防之家讯:在ARM7TDMI处理器内部有37个用户可见的寄存器。

在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同. 所有的37个寄存器,分成两大类:(1)31个通用32位寄存器;(2)6个状态寄存器。

在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。

其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。

寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器

寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所 有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。

寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。

寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。

R14为链接寄存器(LR),在结构上有两个特殊功能:

在每种模式下,模式自身的R14版本用于保存子程序返回地址;

当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。 R14寄存器与子程序调用

操作流程:

1.程序A执行过程中调用程序B;

2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;

3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;



R14寄存器与异常发生

异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。

R14寄存器注意要点

当发生异常嵌套时,这些异常之间可能会发生冲突。

例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是 如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。

解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。 寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认 为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的 方式超出了这些限制,那么结果将是不可预测的。

读R15的限制

正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。

当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。

所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。

“写R15的限制”

正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。

由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:

(1)在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;

(2)在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。

寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。详细描述参看3.8小节。

Thumb状态寄存器

Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:

(1)8个通用寄存器R0~R7;(2)程序计数器(PC);(3)堆栈指针(SP);(4)链接寄 存器(LR);(5)有条件访问程序状态寄存器(CPSR)。

在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。

堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。

注意:在发生异常时,处理器自动进入ARM状态。

链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,详见“ARM状态下的链接寄存器LR”。

注意:在发生异常时,处理器自动进入ARM状态。

ARM状态和Thumb状态之间寄存器的关系

Thumb状态寄存器与ARM状态寄存器有如下的关系:

(1)Thumb状态R0~R7与ARM状态R0~R7相同;

(2)Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;

(3)Thumb状态SP映射到ARM状态R13;

(4)Thumb状态LR映射到ARM状态R14;

(5)Thumb状态PC映射到ARM状态PC(R15)。 下面讲一下,在Thumb状态中访问高寄存器:

在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。

可以使用MOV、CMP和ADD指令对高寄存器操作。安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
小程序码
 
打赏
 
更多>文章标签:防盗
更多>同类安防监控资讯
0相关评论

推荐图文更多...
点击排行更多...
安防监控商机更多...
安防监控圈更多...
最新视频更多...
推荐产品更多...
陶瓷头条 | 空调头条 | 卫浴头条 | 洁具头条 | 油漆头条 | 涂料头条 | 地板头条 | 吊顶头条 | 衣柜头条 | 家居头条 | 博一建材 | 博一建材 | 建材群站 | 建材资讯 | 建材商机 | 建材产品 | 水泥头条 | 楼梯之家 | 门窗之家 | 老姚之家 | 灯饰之家 | 电气之家 | 全景头条 | 照明之家 | 防水之家 | 防盗之家 | 区快洞察 | 漳州建材 | 泉州建材 | 三明建材 | 莆田建材 | 合肥建材 | 宣城建材 | 池州建材 | 亳州建材 | 六安建材 | 巢湖建材 | 宿州建材 | 阜阳建材 | 滁州建材 | 黄山建材 | 安庆建材 | 铜陵建材 | 淮北建材 | 马鞍山建材 |
建材 | 双碳之家 | 企业之家 | 移动社区 | 关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图 | 排名推广 | 广告服务 | 积分换礼 | RSS订阅 | sitemap | 粤ICP备14017808号
(c)2015-2017 Bybc.cn SYSTEM All Rights Reserved
Powered by 安防之家