ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:27.54KB ,
资源ID:23454467      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23454467.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PPC指令集.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PPC指令集.docx

1、PPC指令集PPC指令集存储/加载指令1 整数存储指令整数存储指令如表2所示。表2 整数存储指令名称助记符语法格式字节存储(偏移地址寻址)stbrS, d(rA)字节存储(寄存器寻址)stbxrS, rA, rB记录有效地址的字节存储(偏移地址寻址)stburS, d(rA)记录有效地址的字节存储(寄存器寻址)stbuxrS, rA, rB半字存储(偏移地址寻址)sthrS, d(rA)半字存储(寄存器寻址)sthxrS, rA, rB记录有效地址的半字存储(偏移地址寻址)sthurS, d(rA)记录有效地址的半字存储(寄存器寻址)sthuxrS, rA, rB字存储(偏移地址寻址)stwr

2、S, d(rA)字存储(寄存器寻址)stwxrS, rA, rB记录有效地址的字存储(偏移地址寻址)stwurS, d(rA)记录有效地址的字存储(寄存器寻址)stwuxrS, rA, rB st(ore) * 的指令都是将寄存器中值存储到存储器(内存等)(1) 字节存储指令stb(偏移地址寻址)stb rS,d(rA) 有效地址(EffectAddr)为rA的内容加d,rS的低8位内容存储到有效地址为EA的存储器中。(2) 字节存储指令stbx(寄存器寻址)stbx rS,rA,rB有效地址为rA的内容加上rB的内容,rS的低8位内容存储到有效地址为EA的存储器中。(3) 记录有效地址的字节

3、存储指令stbu(偏移地址寻址)stub rS,d(rA)有效地址EA(rA)d,rS的低8位内容存储到有效地址为EA的存储器中。rAEA,如果rA0,则指令无效。(4) 记录有效地址的字节存储指令stbux(寄存器寻址)stbux rS,rA,rB有效地址EA(rA)(rB),rS的低8位内容存储到有效地址为EA的存储器中,rAEA,如果rA0,则指令无效。(5) 半字存储指令sth(偏移地址寻址)sth rS,d(rA)有效地址EA(rA)d,rS的低16位内容存储到有效地址为EA的存储器中。(6) 记录有效地址的半字存储指令sthu(偏移地址寻址)sthu rS,d(rA)有效地址EA(

4、rA)d,rS的低16位内容存储到有效地址为EA的存储器中。rAEA,如果rA0,则指令无效。(7) 字存储指令stw(偏移地址寻址)stw rS,d(rA)有效地址EA(rA)d,rS的32位内容存储到有效地址为EA的存储器中。(8) 记录有效地址的字存储指令stwu(偏移地址寻址)stwu rS,d(rA)有效地址EA(rA)d,rS的32位内容存储到有效地址为EA的存储器中,rAEA,如果rA0,则指令无效。(9) 记录有效地址的字存储指令stwux(寄存器寻址)stwux rS,rA,rB有效地址EA(rA)(rB),rS的32位内容存储到有效地址为EA的存储器中。rAEA,如果rA0

5、,则指令无效。(10)字存储指令stwx(寄存器寻址)stwx rS,rA,rB有效地址EA(rA)(rB),rS的32位内容存储到有效地址为EA的存储器中。2、整数加载指令整数加载指令如表3所示。名称助记符语法格式高位清零加载字节指令(偏移地址寻址)lbzrD, d(rA)高位清零的加载字节指令(寄存器寻址)lbzxrD, rA, rB高位清零的加载字节并记录有效地址指令(偏移地址寻址)lbzurD, d(rA)高位清零的加载字节并记录有效地址指令(寄存器寻址)lbzuxrD, rA, rB高位清零的加载半字指令(偏移地址寻址)lhzrD, d(rA)高位清零的加载半字指令(寄存器寻址)lh

6、zxrD, rA, rB高位清零的加载半字并记录有效地址指令(偏移地址寻址)lhzurD, d(rA)高位清零的加载半字并记录有效地址指令(寄存器寻址)lhzuxrD, rA, rB加载半字指令(偏移地址寻址)lharD, d(rA)加载半字指令(寄存器寻址)lhaxrD, rA, rB加载半字并记录有效地址指令(偏移地址寻址)lhaurD, d(rA)加载半字并记录有效地址指令(寄存器寻址)lhauxrD, rA, rB加载字指令(偏移地址寻址)lwzrD, d(rA)加载字指令(寄存器寻址)lwzxrD, rA, rB加载字并记录有效地址指令(偏移地址寻址)lwzurD, d(rA)加载字

7、并记录有效地址指令(寄存器寻址)lwzuxrD, rA, rB l(oad)* 指令从存储器(内存等)取数据加载到寄存器 (1) lbz rD, d(rA) ;EA(rA|0)d。从存储器读取EA地址的内容,并加载低8位到rD,rD的其他位清0。不影响其他寄存器。(2) lbzu rD, d(rA) ;EA(rA)d。从存储器读取EA地址一个字节的内容,并加载低8位到rD,rD的其他各位清零,有效地址EA存放在rA中。(3) lbzux rD,rA,rB ;EA(rA)(rB)。从存储器读取EA地址一个字节的内容,并加载低8位到rD,rD的其他各位清零,EA存放在rA中。如果rA0或者rArD

8、,则指令无效。(4) lbzx rD,rA,rB ;EA(rA|0)(rB)。从存储器读取EA地址一个字节的内容,并加载低8位到rD,rD的其他各位清0。(5) lha rD, d(rA) ;EA(rA|0)d。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD的其他位填充最高位的值。(6) lhax rD,rA,rB ;EA(rA)(rB)。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD的其他位填充最高位的值。(7) lhau rD, d(rA) ;EA(rA)d。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD的其他位填充最高位的值。EA存放在rA中,如

9、果rA0或者rArD,则指令格式无效。(8) lhaux rD,rA,rB ;EA(rA)(rB)。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD的其他位填充最高位的值。EA存放在rA中,如果rA0或者rArD,则指令格式无效。(9) lhz rD, d(rA) ;EA(rA|0)d。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD的其他位清零。(10)lhzu rD, d(rA) ;EA(rA|0)d。从存储器EA处读取两个字节的数,并加载到rD的低16位。rD其他位清零。EA存入rA,如果rA0或者rArD,则指令格式无效。 (11)lhzux rD,rA,rB

10、;EA(rA)(rB)。从存储器EA处读取两个字节的数,加载到rD的低16位,rD其他位清零。EA存入rA,如果rA0或者rArD,则指令格式无效。 (12)lhzx rD,rA,rB ;EA(rA|0)(rB),从EA处读取两个字节的数,并加载到rD的低16位,将rD的其他位清零。 (13)lwz rD,d(rA);EA(rA|0)d,从EA处读取4个字节的数,并加载到rD。 (14)lwzu rD,d(rA);EA(rA)d,从EA处读取4个字节的数,并加载到rD。rAEA,如果rA0或rArD,则指令格式无效。 (15)lwzux rD,rA,rB ;EA(rA)(rB),从EA处读取4

11、个字节的数,并加载到rD。rAEA,如果rA0或rArD,则指令格式无效。 (16)lwzx rD,rA,rB ;EA(rA|0)(rB),从EA处读取4个字节的数,并加载到rD。整数多字存储/加载指令表3 整数多字存储/加载指令 名称助记符语法格式多字加载lmwrD,d(rA)多字存储stmwrS,d(rA) (1)lmw rD,d(rA) ;EArAd。以EA起始的n个连续的字加载到通用寄存器GPRs rD到r31处,n32rD。EA必须为4的倍数,如果rA0,则指令格式无效。指令执行时间长。(2)stmw rS,d(rA) ;EArAd。把通用寄存器从GPRs rS到GPRs r31,存

12、储到以EA起始的n个连续的字存储器,EA必须是4的倍数。指令执行时间长。转移指令表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) 无条件转移指令bx(b ba bl bla)指令的编码格式: 指令的语法格式:b target_addr(AA=0 LK=0)ba target_addr(AA=1 LK=0)bl target_addr

13、(AA=0 LK=1)bla target_addr(AA=1 LK=1)如果AA0,则转移目标地址为LI|0b00的值经符号位扩展后加上指令地址。如果AA1,则转移目标地址为LI|0b00的值经符号扩展后的值。如果LK1,则转移指令下一条指令的有效地址存放到连接寄存器。(1) 条件转移指令bcx指令编码格式: 指令语法格式:bc BO, BI, target_addr(AA0 LK0)bca BO, BI, target_addr(AA1 LK0)bcl BO, BI, target_addr(AA0 LK1)bcla BO, BI, target_addr(AA1 LK1)BI字段表示条件

14、寄存器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指出)指令的编码格式: 指令的语法格式:

15、bclr BO, BI(LK=0)bclrl BO, BI(LK=1)BI字段表示条件寄存器CR中的位用于转移条件。BO字段操作码定义如表5所示。转移目标地址为LR0-29|0b00。如果LK1,则转移指令下一条有效地址存放到连接寄存器。(3) 条件转移指令bcctrx(转移目标地址由CTR指出)指令的编码格式: 指令的语法格式:bcctr BO, BI(LK=0)bcctrl BO, BI(LK=1)转移目标地址是CTR|0b00。如果LK1,则转移指令下一条指令的有效地址存放到连接寄存器。如果减量计数器(BO2=0),指令格式无效,则转移到目标地址。特殊寄存器传送指令特殊寄存器传送指令如表

16、6所示。表6 特殊寄存器传送指令名称助记符语法格式读取机器状态寄存器mfmsrrD写入机器状态寄存器mtmsrrS读取特殊功能寄存器mfsprrD, SPR写入特殊功能寄存器mtsprSPR, rS读取段寄存器mfsrrD, SR写入段寄存器mtsrSR, rS间接读取段寄存器mfsrinrD, rB间接写入段寄存器mtsrinrS, rB读取时基寄存器mftbrD, TBR (1) 读取机器状态寄存器指令mfmsr 指令的编码格式: 指令的语法格式:mfmsr rD读取MSR的内容放入rD中,这是超级用户层指令,不影响其他寄存器。(2)写入机器状态寄存器指令mtmsr指令的编码格式: 指令的

17、语法格式:mtmsr rS把rS的内容存入MSR中,这是超级用户指令。(1) 读取特殊功能寄存器指令mfspr指令的编码格式: 指令的语法格式:mfspr rD,SPR指令操作:nspr5-9|spr0-4rDspr(n)特殊功能寄存器(SPR)的编码如表7所示,将SPR的内容存入rD中。表7 Power PC UISA SPR编码 spr 寄存器名编码nspr5-9spr0-4 10000000001XER80000001000LR90000001001CR (2) 写入特殊功能寄存器指令mtspr指令的编码格式: 指令的语法格式:mtspr spr,rS把rS的内容存入到指定的特殊功能寄存

18、器中。(3) 读取段寄存器指令mfsr指令的编码格式:指令的语法格式: mfsr rD,SR指令操作:rDSEGREG(SR)将段寄存器SR的内容读入rD中,这是一个超级用户层指令。(1) 写入段寄存器指令mtsr指令的编码格式: 指令的语法格式:mtsr SR,rS将rS中的内容读入SR,这是一个超级用户层指令。(2) 间接读取段寄存器指令mfsrin指令的编码格式: 指令的语法格式:mfsrin rD,rB指令操作:rDSEGREG(rB0-3)由rB寄存器的03位选取的段寄存器的内容,复制到rDzhong。这是一个超级用户层指令。(3) 间接写入段寄存器指令mtsrin指令的编码格式:

19、指令的语法格式:mtsrin rS,rB指令操作:SEGREG(rB0-3)(rS)将rS中的内容复制到由rB的03位所指定的寄存器中。这是一个超级用户层指令。(4) 读取时基寄存器指令mftb指令的编码格式: 指令的语法格式:mftb rD,TBR指令操作:ntbr5-9|tbr0-4if n=268 thenrDTBLelse if n=269 thenrDTBU该指令的TBR编码如表8所示。表8 指令mftb的TBR编码TBR 寄存器名访问编码tbr5-9tbr0-4 2680100001100TBL用户2690100001101TBR用户 系统调用指令(1) 系统调用指令sc指令的编码

20、格式: 指令的使用:sc指令调用操作系统去执行服务程序。当控制返回到一个执行系统调用的程序时,寄存器的内容依赖于程序提供的系统所使用的寄存器的约定。跟在sc指令后面的有效指令地址被放在SRR0中。MSR中的位0、59和1631被放在SRR1中对应的位置,SRR1中位14和1015被设置为未定义值。当sc异常产生,异常处理程序更改MSR寄存器。异常处理程序到MSRIP形成基址加0xC00偏移量形成的地址去取下一条指令。受影响的寄存器有:依赖于系统服务、SRR0、SRR1及MSR。(2) 中断返回指令rfi指令的编码格式: 指令操作:MSR16-23,25-27,30-31 SRR116-23,2

21、5-27,30-31NIAiea SRR00-29|0b00SRR1中的位0、59和1631被放在MSR中对应的位置。如果新的MSR值没有使能任何未完的操作,则在MSR的控制下,从地址SRR00-29|0b00取下一条指令。指令的使用中受影响的寄存器为MSR。PowerPC汇编基础篇PowerPC正用于和曾经用于 IBM服务器, 苹果电脑,任天堂Gamecube游戏机Gekko 芯片用在了任天堂的 GameCube 中,Xenon 则用在了 Microsoft 的 Xbox 360 中。Cell Broadband Engine 是近来崭露头角的一种体系结构,使用 PowerPC 指令,并且具

22、有八个向量处理器。Sony PlayStation 3 将使用 Cell,考虑到 PlayStation 3 将用于广泛的多媒体应用程序,因此还使用为数众多的其他向量。PowerPC 指令集比 POWER 处理器系列更加有用。指令集本身可以 64 位模式操作,也可以简化的 32 位模式操作。POWER5 处理器支持这两种模式,POWER5 上的 Linux 发布版支持为 32 位和 64 位 PowerPC 指令集而编译的应用程序。应用程序二进制接口(ABI)PPC32 Linux和NetBSD使用 SVR4 ABIPPC64 Linux和AIX 使用 PowerOpen ABiSVR4 AB

23、I1)传参数从 GPR3 开始2)GPR3-GPR12 是容易失去的寄存器。如果需要,在调用子例程之前,必须先保存并在返回后恢复.PowerPC 寄存器有编号,而没有名称。对于初学者来说,有时这会使人混淆,因为 tts 无法轻易地与寄存器区分开。3可以表示数值3或者寄存器 gpr3 ,或者浮点 fpr3 ,或者特殊用途的寄存器 spr3 。习惯了就好了。:)但是,在GDB的反汇编中, 寄存器是用 r3 表示的通用寄存器r0 跟stack frame有关系, 当建立stack frame时,用来保存旧的LRr1 stack pointerr2 toc(table of content)指针r3

24、第一个参数, 返回值也放在这个寄存器r11 常用做指针专用寄存器lr 链接寄存器,它用来存放函数调用结束处的返回地址。ctr 计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。xer 定点异常寄存器,存放整数运算操作的进位以及溢出信息。msr 机器状态寄存器,用来配置微处理器的设定。cr 条件寄存器,它分成8个4位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。常用指令li REG, VALUE加载寄存器 REG,数字为 VALUEadd REGA, REGB, REGC将 REGB 与 REGC 相加,并将结果存储在 REGA 中addi REGA, REGB

25、, VALUE将数字 VALUE 与 REGB 相加,并将结果存储在 REGA 中mr REGA, REGB将 REGB 中的值复制到 REGA 中or REGA, REGB, REGC对 REGB 和 REGC 执行逻辑 “或” 运算,并将结果存储在 REGA 中ori REGA, REGB, VALUE对 REGB 和 VALUE 执行逻辑 “或” 运算,并将结果存储在 REGA 中and, andi, xor, xori, nand, nand, and nor其他所有此类逻辑运算都遵循与 “or” 或 “ori” 相同的模式ld REGA, 0(REGB)使用 REGB 的内容作为要载

26、入 REGA 的值的内存地址lbz, lhz, and lwz它们均采用相同的格式,但分别操作字节、半字和字(“z” 表示它们还会清除该寄存器中的其他内容)b ADDRESS跳转(或转移)到地址 ADDRESS 处的指令bl ADDRESS对地址 ADDRESS 的子例程调用cmpd REGA, REGB比较 REGA 和 REGB 的内容,并恰当地设置状态寄存器的各位beq ADDRESS若之前比较过的寄存器内容等同,则跳转到 ADDRESSbne, blt, bgt, ble, and bge它们均采用相同的形式,但分别检查不等、小于、大于、小于等于和大于等于std REGA, 0(REG

27、B)使用 REGB 的地址作为保存 REGA 的值的内存地址stb, sth, and stw它们均采用相同的格式,但分别操作字节、半字和字sc对内核进行系统调用所有计算值的指令均以第一个操作数作为目标寄存器。在所有这些指令中,寄存器都仅用数字指定。例如,将数字 12 载入寄存器 5 的指令是 li 5, 12。我们知道,5 表示一个寄存器,12 表示数字 12,原因在于指令格式(因为li第一个操作数就是寄存器,第2个是立即数)。在某些指令中,GPR0 只是代表数值 0,而不会去查找 GPR0 的内容。一个最简单的例子.globl .main .main: li 3, 5 blr保存为 sim

28、ple.s用gcc来汇编连接$gcc simple.s -o simple$./simple$ echo $?5说明上次运行的程序,返回值是5看懂PowerPC汇编之指令集架构 看懂PowerPC汇编,需要如下3方面的知识: 1.PowerPC指令集架构即Power ISA,可以从Power.org获得,包括寄存器定义,数据模型,寻址方式和指令定义以及指令助记符; 2.PowerPC ABI即应用程序二进制接口,即寄存器的使用规范和栈调用结构; 3.PowerPC Pseudo-ops,即.text, .align n等汇编语言中常用的伪操作符。 PowerPC ISA分为3个级别即“Book

29、”,分别对应于用户指令集体系结构,虚拟环境体系结构和操作环境体系结构。其中Book III分化出了服务器版本Book III-S(经典PowerPC架构)和嵌入式版本Book III-E(专门为嵌入式优化的版本)。 1.寄存器定义: PowerPC处理器寄存器分为2大类-专用寄存器和非专用寄存器。 其中,非专用寄存器包括32个通用目的寄存器(GPR),32个浮点寄存器(FPR),条件寄存器(CR),浮点状态和控制寄存器(FPSCR);专用寄 存器主要包括连接寄存器(LR),计数寄存器(CTR),机器状态寄存器(MSR)以及时间基准寄存器(TBL/TBU)等等。PPC4xx系列处理器还 有DCR寄存器,需要用专门的指令访问。这里有两点需要注意: 1. PowerPC处理器可以运行于两个级别,即用户模式

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1