- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
32位PowerPC构架通用寄存器分析及总结三
32位PowerPC构架通用寄存器分析及总结三
4.6SR(Segment Registers)寄存器
OEA定义了16个32位的SR寄存器,段寄存器SR可以使用mtsr/mfsr,mtsrin/mfsrin指令进程访问。
随着CR[0]位(我们称之为T位)的值的 不同,CR寄存器有两种不同的格式。
当T位为1时格式如下:
CR[1]位:系统模式保护位
CR[2]位:用户模式保护位
CR[3]位:不可执行保护位
CR[4:7]位:保留位
CR[8:31]位:VSID位,我们在4.5节页面地址映射中已经看到该位段的作用。
当T位为0时格式如下:
CR[1]位:系统模式保护位
CR[2]位:用户模式保护位
CR[3]位:不可执行保护位
CR[3:11]位:Bus unit ID
CR[12:31]位:Device-specific data for I/O controller
备注:这个位段,我现在不清楚,暂时附上datasheet原文,以后再修改O(∩_∩)O~
4.7 DAR(Data Address Register)寄存器
存放访存指令产生的引发中断的有效地址,比较简单。
格式如下:
4.8 SPRG0–SPRG3
提供给操作系统使用,格式如下:
SPRG0:操作系统可能会加载一个独立的物理地址到该寄存器中,来标识一个内存区域是第一级的中断句柄专用的。
SPRG2:可以被第一级的中断来保存通用寄存器的内容,该内容可以作为内存中保存其它通用寄存器的基地址。
SPRG2和SPRG3可以在操作系统需要时使用!
备注:E600有8个SPRGs寄存器。
4.9 DSISR寄存器
用来决定DSI中断的中断源,格式如下:
4.10 SRR0(Machine Status Save/Restore Register 0)寄存器
当发生中断时,SRR0用来保持中断发生的那一刻MSR的状态,当中断返回结束执行rfi指令时,SRR0用来恢复MSR寄存器的值,它也可以用来保持系统调用之前的那条指令的有效地址,当系统中断结束时会执行rfi指令,汇编SPR0保持的地址赋值给NIA(Next Instruction Address)寄存器(也就是我们通常说的PC寄存器)
格式如下:
4.11 SRR1(Machine Status Save/Restore Register 1)
该寄存器同4.10
?
4.12 FPECR(Floating-Point Exception Cause Register)
FPECR寄存器用来支持产生浮点中断的原因。
备注:E600没有浮点预算单元,因而也就没有FPECR寄存器
?
4.13 TB(Time Base Facility)寄存器组
TB寄存器组提供了一个可以被执行相关的频率驱动的长周期的计数器。
VEA定义用户模式下的程序可以读取TB寄存器的值,而在系统模式下的程序,比如操作系统或者一些系统引导例程可以修改该寄存器。
OEA定义系统模式可以写入值到TB寄存器。
备注:TB寄存器是一种易失性(volatile)资源,可以在系统重启的时候初始化,但是并不能保证在处理器重启的时,一定会初始化该寄存器。
我们可以使用mttbl 和 mttbu指令来修改TB寄存器的低32位TBL寄存器和高32位TBU寄存器。
mttbl ,mttbu和mtspr把TBL和TBU当做普通的32位寄存器来处理,修改一个寄存器的值时不会影响到另一个寄存器。
写入TB寄存器组的指令序列如下:
lwz rx,upper #load 64-bit value for
lwz ry,lower # TB into rx and ry
li rz,0
mttbl rz #force TBL to 0
mttbu rx #set TBU
mttbl ry #set TBL,
?
备注:
我们假设后面三条指令执行时,没有中断产生。同时我们应该下赋值TBL寄存器,这样可以防止进位的产生。
读取TB寄存器组的值可以使用下面的指令序列如下:
loop:
mftbu rx #load from TBU
mftb ry #load from TBL
mftbu rz #load from TBU
cmpw rz,rx #see if ‘old’ = ‘new’
bne loop #loop if carry occurred
备注:循环比较也是为了防止进位产生!
?
4.14 DEC(Decrementer Register)寄存器
32位的DEC寄存器包含一个32位的递减计数器,它提供了一种机制为可编程的软件延迟提供了递减中断,递减的频率和TB寄存器组一样,也是基于通用的系统实现的时钟频率。
DEC寄存器的格式如下:
在MSR[EE]=1情况下,当DE
文档评论(0)