Chinaunix首页 | 论坛 | 博客
  • 博客访问: 478036
  • 博文数量: 174
  • 博客积分: 2502
  • 博客等级: 少校
  • 技术积分: 1923
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-28 09:47
文章分类

全部博文(174)

文章存档

2011年(8)

2010年(16)

2009年(68)

2008年(82)

我的朋友

分类:

2009-05-14 13:24:33

 

转移指令

4 分支控制指令

名称

助记符

语法格式

无条件转移

b( ba bl bla)

target_addr

条件转移

bc( bca bcl bcla)

BO,BI,target_addr

条件转移(转移目标地址由LR指出)

bclr(bclrl)

BO,BI

条件转移(转移目标地址由CTR指出)

bcctr(bcctrl)

BO,BI

(1)    无条件转移指令bxb ba bl bla

指令的编码格式:

 

指令的语法格式:

b target_addrAA=0 LK=0

ba target_addrAA=1 LK=0

bl target_addrAA=0 LK=1

bla target_addrAA=1 LK=1

如果AA0,则转移目标地址为LI||0b00的值经符号位扩展后加上指令地址。

如果AA1,则转移目标地址为LI||0b00的值经符号扩展后的值。

如果LK1,则转移指令下一条指令的有效地址存放到连接寄存器。

(1)    条件转移指令bcx

指令编码格式:

 

指令语法格式:

bc BO, BI, target_addrAA0 LK0

bca BO, BI, target_addrAA1 LK0

bcl BO, BI, target_addrAA0 LK1

bcla BO, BI, target_addrAA1 LK1

BI字段表示条件寄存器CR中的位用于转移条件。BO字段操作码定义见表5

5 BO字段操作码定义

BO

说明

0000y

计数器CTR减量,如果条件不成立则转移

0001y

计数器CTR减量,如果条件不成立则转移

001zy

如果条件不成立,则转移

0100y

计数器CTR减量,如果条件成立则转移

0101y

计数器CTR减量,如果条件成立则转移

011zy

如果条件成立则转移

1z00y

计数器CTR减量,如果CTR!=0,则发生转移

1z01y

计数器CTR减量,如果CTR0,则发生转移

1z1zz

发生转移

注:位z表示该位可以被忽略,位y表示是不是条件转移

(2)    条件转移指令bclx(转移目标地址由LR指出)

指令的编码格式:

 

指令的语法格式:

bclr BO, BI(LK=0)

bclrl BO, BI(LK=1)

BI字段表示条件寄存器CR中的位用于转移条件。

BO字段操作码定义如表5所示。

转移目标地址为LR[0-29]||0b00

如果LK1,则转移指令下一条有效地址存放到连接寄存器。

(3)    条件转移指令bcctrx(转移目标地址由CTR指出)

指令的编码格式:

 

指令的语法格式:

bcctr BO, BI(LK=0)

bcctrl BO, BI(LK=1)

转移目标地址是CTR||0b00

如果LK1,则转移指令下一条指令的有效地址存放到连接寄存器。

如果减量计数器(BO[2]=0),指令格式无效,则转移到目标地址。

特殊寄存器传送指令

特殊寄存器传送指令如表6所示。

6 特殊寄存器传送指令

名称

助记符

语法格式

读取机器状态寄存器

mfmsr

rD

写入机器状态寄存器

mtmsr

rS

读取特殊功能寄存器

mfspr

rD, SPR

写入特殊功能寄存器

mtspr

SPR, rS

读取段寄存器

mfsr

rD, SR

写入段寄存器

mtsr

SR, rS

间接读取段寄存器

mfsrin

rD, rB

间接写入段寄存器

mtsrin

rS, rB

读取时基寄存器

mftb

rD, TBR

(1)    读取机器状态寄存器指令mfmsr

   指令的编码格式:

 

   指令的语法格式:

mfmsr rD

读取MSR的内容放入rD中,这是超级用户层指令,不影响其他寄存器。

2)写入机器状态寄存器指令mtmsr

指令的编码格式:

 

指令的语法格式:

mtmsr rS

rS的内容存入MSR中,这是超级用户指令。

(1)    读取特殊功能寄存器指令mfspr

指令的编码格式:

 

指令的语法格式:

mfspr rDSPR

指令操作:

n<spr[5-9]||spr[0-4]

rD<spr(n)

特殊功能寄存器(SPR)的编码如表7所示,将SPR的内容存入rD中。

7 Power PC UISA SPR编码

spr

寄存器名

编码n

spr[5-9]

spr[0-4]

1

00000

00001

XER

8

00000

01000

LR

9

00000

01001

CR

(2)    写入特殊功能寄存器指令mtspr

指令的编码格式:

 

指令的语法格式:

mtspr sprrS

rS的内容存入到指定的特殊功能寄存器中。

(3)    读取段寄存器指令mfsr

指令的编码格式:

 

    指令的语法格式:

    mfsr rDSR

指令操作:

rD<SEGREGSR

将段寄存器SR的内容读入rD中,这是一个超级用户层指令。

(1)    写入段寄存器指令mtsr

指令的编码格式:

 

指令的语法格式:

mtsr SRrS

rS中的内容读入SR,这是一个超级用户层指令。

(2)    间接读取段寄存器指令mfsrin

指令的编码格式:

 

指令的语法格式:

mfsrin rDrB

指令操作:

rD<SEGREGrB[0-3]

rB寄存器的03位选取的段寄存器的内容,复制到rDzhong。这是一个超级用户层指令。

(3)    间接写入段寄存器指令mtsrin

指令的编码格式:

 

指令的语法格式:

mtsrin rSrB

指令操作:

SEGREGrB[0-3]<—(rS

rS中的内容复制到由rB03位所指定的寄存器中。这是一个超级用户层指令。

(4)    读取时基寄存器指令mftb

指令的编码格式:

 

指令的语法格式:

mftb rDTBR

指令操作:

n<tbr[5-9]||tbr[0-4]

if n=268 then

rD<TBL

else if n=269 then

rD<TBU

该指令的TBR编码如表8所示。

8 指令mftbTBR编码

TBR

寄存器名

访问

编码

tbr[5-9]

tbr[0-4]

268

01000

01100

TBL

用户

269

01000

01101

TBR

用户

 

系统调用指令

(1)    系统调用指令sc

指令的编码格式:

 

指令的使用:

sc指令调用操作系统去执行服务程序。当控制返回到一个执行系统调用的程序时,寄存器的内容依赖于程序提供的系统所使用的寄存器的约定。

跟在sc指令后面的有效指令地址被放在SRR0中。MSR中的位0591631被放在SRR1中对应的位置,SRR1中位141015被设置为未定义值。当sc异常产生,异常处理程序更改MSR寄存器。异常处理程序到MSR[IP]形成基址加0xC00偏移量形成的地址去取下一条指令。

受影响的寄存器有:

依赖于系统服务、SRR0SRR1MSR

(2)    中断返回指令rfi

指令的编码格式:

 

指令操作:

MSR[16-23,25-27,30-31] <SRR1[16-23,25-27,30-31]

NIA<iea SRR0[0-29]||0b00

SRR1中的位0591631被放在MSR中对应的位置。如果新的MSR值没有使能任何未完的操作,则在MSR的控制下,从地址SRR0[0-29]||0b00取下一条指令。

指令的使用中受影响的寄存器为MSR

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