32位PowerPC构架通用寄存器分析及总结三.docVIP

32位PowerPC构架通用寄存器分析及总结三.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档