Chinaunix首页 | 论坛 | 博客
  • 博客访问: 580077
  • 博文数量: 65
  • 博客积分: 2844
  • 博客等级: 上尉
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 12:01
文章分类

全部博文(65)

文章存档

2014年(7)

2012年(20)

2011年(35)

2010年(3)

分类: 嵌入式

2012-05-19 20:53:16

    1 通用寄存器组GPR

E500内核共定义了3264位的GPRGPR0~GPR31。其中GPR的高32位只能由E500内核的SPE使用,而E500内核的其他指令只能使用GPR的低32位,即第32~63位。

E500内核的大多数指令都可以使用通用寄存器作为操作数。E500内核使用指令集为32位,在这些指令中,通用寄存器将占用5位,用来表示GPR0~31

2 CR寄存器

E500内核中的IAR寄存器组是用来保存指令执行结果或控制指令执行的一组寄存器,在IAR寄存器组中包括CRConditional Register)寄存器,CTRCounter Register)寄存器,LRLink Register)寄存器,XERInteger Exception Register)寄存器和ACCAccumulator)寄存器。

CR寄存器用来存放指令执行后的状态,该寄存器分为8个字段,分别为CR0~7,其中每个字段由4位组成。这些字段被用来表示指令操作的结果。

其中整型运算指令,如整型数的加减及逻辑运算,使用CR0保存结果状态。

l  CR0[0],用于表示LT(小于,当整型指令运算结果为负时置1)。

l  CR0[1],用于表示GT(大于,当整型指令运算结果为正时置1)。

l  CR0[2],用于表示EQ(等于,当整型指令运算结果为0时置1)。

l  CR0[3],用于表示SO(溢出,当整型指令运算结果溢出时置1)。

浮点运算指令使用CR1保存结果状态。

l  CR1[0],用于表示LT(小于,当浮点指令运算结果为负时置1)。

l  CR1[1],用于表示GT(大于,当浮点指令运算结果为正时置1)。

l  CR1[2],用于表示EQ(等于,当浮点指令运算结果为0时置1)。

l  CR1[3],用于表示SO(溢出,当浮点指令运算结果溢出时置1)。

E500内核的比较指令可以使用CR寄存器的全部CRn字段(n07)保存比较指令的结束状态。在比较指令如cmp指令后,一般会紧跟着一条跳转指令,如bc指令。其中cmp指令可以选择使用CR寄存器的指定的CRn字段存放比较指令的结果状态,bc指令也可以选择使用CR寄存器的指定的CRn中的状态进行跳转,一般来说bc指令选择的CRncmp中指定的CRn相同。比较指令使用的CRn字段的定义如下所示。

l  CRn[0],用于表示LT(小于,当比较结果结果为负时置1)。

l  CRn[1],用于表示GT(大于,当比较结果结果为正时置1)。

l  CRn[2],用于表示EQ(等于,当比较结果结果为0时置1)。

l  CRn[3],用于表示SO(溢出,当比较结果溢出时置1)。

比较指令和跳转指令通常由编译器从CR寄存器中选择合适的CRn字段,程序员也可以书写汇编语言,在CR寄存器中选择合适的CRn。如果在比较指令和跳转指令不选择CR寄存器的CRn字段时,这些指令将使用CR0

阅读(1482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~