版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PowerPC体系结构之指令集概述BookE定义的PowerPC指令集的指令可分为以下几类:分支跳转指令CR指令整数指令浮点指令处理器控制指令CR指令主要是对CRcrand,cror,crxor等等。常用指令先看一个测试程序:inttest_call(inta,intb,intc){a=b+c;returna;}inttest_if(ints){inti;if(s>i=s;elseif(s<0)i=-s;elsei=s*8;returni;}inttest_cyc1(intc){intsum=0;do{sum+=c;c--;}while(c>0);returnc;}inttest_cyc2(intc){intsum=0;for(;c>0;c--)sum+=c;returnc;}intmain(){inta,b,c,d;a=test_if(5);b=test_cyc1(10);c=test_cyc2(10);d=test_call(1,2,3);returna+b+c+d;}引入的目的在于查看判断、循环和过程调用这些基本结构在PowerPC里怎么被支持。-O2参数编译后,objdump-S-d反汇编,则:1000040c<test_call>:inttest_call(inta,intb,intc){a=b+c;returna;}1000040c:回值7c642a14addr3,r4,r5---->对应a,b,c三个参数,同时r3又置返10000410:回4e800020blr---->跳转到LR所存放的地址处,即函数返10000414<test_if>:inttest_if(ints){inti;if(s>10000414: 7c601b79 r0,r3 ----->r3移到r00,则置CR0的相应位。指令后多一点,则说明该指令会据执行结果,设置CR的相应位10000418: 7c030378 mr r3,r0 ----->此条指令多余1000041c: 4da10020 bgtlr+ ----->若CR0[gt]位为则跳转到LR所放的地址处,即直接函数返回了。此条指令等价于bclr 13,1i=s;elseif(s<0)10000420: 38600000 li r3,010000424: 4d820020 beqlr ----->若CR0[eq]位为1,则跳转到LR所存放的地址处,也直接函数返回了。此条指令等价于bclr 12,i=-s;10000428:else7c6000d0neg r3,r0i=s*8;10000428:else7c6000d0neg r3,r0i=s*8;returni;}1000042c:4e800020blr----->跳转到LR所存放的地址处,函数返回10000430inttest_cyc1(intc){10000430:3403ffffaddic.r0,r3,-110000434:7c6903a6mtctr r310000438:41800010blt- 10000448<test_cyc1+0x18>intsum=0;do{sum+=c;c--;1000043c:3863ffffaddi r3,r3,-1}while(c>0);10000440:4200fffcbdnz+ 1000043c<test_cyc1+0xc>returnc;}10000444:4e800020blr10000448:38000001li r0,11000044c:7c0903a6mtctr r010000450:4bffffecb 1000043c<test_cyc1+0xc>10000454inttest_cyc2(intc){10000454:2c030000cmpwi r3,010000458:39200000li r9,01000045c:7d23481e.long0x7d23481eintsum=0;for(;c>0;c--)sum+=c;returnc;}10000460: 7d234b78 mr r3,r910000464: 4e800020 blrintmain(){10000468:9421ffe0stwur1,-32(r1)1000046c:7c0802a6mflrr0inta,b,c,d;a=test_if(5);10000470:38600005lir3,510000474:90010024stwr0,36(r1)10000478:9361000cstwr27,12(r1)1000047c:93810010stwr28,16(r1)10000480:93a10014stwr29,20(r1)10000484:4bffff91bl10000414<test_if>10000488:7c7d1b78mrr29,r3b=test_cyc1(10);1000048c:3860000alir3,1010000490:4bffffa1bl10000430<test_cyc1>10000494:7c7b1b78mrr27,r3c=test_cyc2(10);10000498: 3860000a li r3,10d=test_call(1,2,3);1000049c:7fbdda14addr29,r29,r27100004a0:4bffffb5bl10000454<test_cyc2>100004a4:38800002lir4,2100004a8:7c7c1b78mrr28,r3100004ac:38a00003lir5,3100004b0:38600001lir3,1100004b4:4bffff59bl1000040c<test_call>returna+b+c+d;}100004b8:80010024lwzr0,36(r1)100004bc:7f9c1a14addr28,r28,r3100004c0:8361000clwzr27,12(r1)100004c4:7c7de214addr3,r29,r28100004c8:83810010lwzr28,16(r1)100004cc:83a10014lwzr29,20(r1)100004d0:7c0803a6mtlrr0100004d4:38210020addir1,r1,32100004d8:4e800020blr分类概述分支跳转指令这类指令算是PowerPC里比较有特色的,也是稍显复杂的。这类指令与CR,LR和CTR紧密相联,建构起判断、循环和过程调用这些程序的基本结构。其大致可分为四类:BranchBranchConditionalBranchConditionaltoCountRegisterBranchConditionaltoLinkRegisterBranch这类指令与CR没有联系,即为非条件跳转,助记符后直接跟立即数地址。指令内为立即数地址预留26位,即可跳转2^26大小的空间,如:(CIA,CurrentInstructionAddress)b0x20ba0x200x20----->以当前指令地址为基点,往后跳转0x20字节,即PC=CIA+----->直接跳转到地址0x20处。后缀为a,则表示使用AbsoluteAddress,PC=0x20。bl0x20----->在b0x20的基础上,将LR更新为CIA+4bla+40x20----->LR后缀带LR为CIA以上针对32位的情形,对64位则使用指令be,bea,bel,bela功能与上同。BranchConditional此类为条件跳转指令。皆以bc开头,带3个操作数,如:bc BO,BI,BDbca BO,BI,bcl BO,BI,BDbcla BO,BI,BD后缀a,l的含义与branchBO指定关联的CR也是5位;BD位。其中以BO的编码最为复杂BO从左到右编号为0~BO[0]:为1,则直接跳转BO[1]:为1,则条件为真时,跳转。否则条件为假时,跳转BO[2]:为1,则CTR1BO[3]:为1时,则CTR==0时跳转;为0时,则CTR!=0时跳转BO[4]:静态预测位,1表示unlikely,0表示likely则常见的BO值:20(0b10100)则表示无条件跳转12(0b01100)CR1时跳转4(0b00100)则表示CR0时跳转至于静态预测的策略位,默认被置为0,则其行为为:b1.目标地址小于当前指令地址,预测为跳转b2.目标地址大于当前指令地址,预测为不跳转b3.对于目标地址在CTR/LR中的条件跳转指令,一律预测为不跳转若该位被置1,则上述b1,b2,b3的静态预测行为分别为:不跳转,跳转,跳转。可以给分支指令加一个+/-的后缀,来简化。加'+'的指令,一律预测为跳转。加'-'的分支指令,一律预测为不跳转。则对于b1,后缀'+'会将y位置0,'-'则将y位置1。对于b2,后缀'+'会将y位置1,'-'则将y位置0。对于b3,后缀'+'会将y位置1,'-'则将y位置0。BI与关联CR位的关系为:32+BI即,若BI为2,则对应于CR[34],即为CR0[gt]位。以上针对32位的情形,对64位则使用指令bce,bcea,bcel,bcela功能与上同。BranchConditionaltoCountRegisterbcctr BO,BIbcctrl BO,后缀lbranch类指令同。BO,BI的编码与BranchConditional类指令同。跳转目标地址位于CTR中。以上针对32位的情形,对64位则使用指令bcctre,bcctrel功能与上同。BranchConditionaltoLinkRegisterbclr BO,BIbclrl BO,BI后缀lbranch类指令同。BO,BI的编码与BranchConditional类指令同。跳转目标地址位于LR中。以上针对32位的情形,对64位则使用指令bclre,bclrel功能与上同。CR指令这类指令包括用来支持CR内部位运算的指令和CR与GPR之间的数据交换指令。CR内位运算指令这类指令的格式皆为:crxxx BT,BA,BBBT,BA,BB是CR内的位编号,取值范围为0~31,如crand 0,8,12,则将CR[32+8](CR2[lt])与CR[32+12](CR3[lt])作与操作后将结果置入CR[32+0]即CR[32]=CR[40]&CR[44]crand: CR[32+BA]&CR[32+BB]crandc: CR[32+BA]&creqv: ~(CR[32+BA]^CR[32+BB]),即位相等,则置1;不等则置0crnand: ~(CR[32+BA]&CR[32+BB])crnor: ~(CR[32+BA]|CR[32+BB])cror: CR[32+BA]|CR[32+BB]crorc: CR[32+BA]|(~CR[32+BB]),先取反后再或crxor: CR[32+BA]^CR[32+BB],位异或CR与GPR间数据交换指令mcrf BF,BFA --- MoveConditionRegisterFields将CR之BFA域复制到BF域。如mcrf 0,3则将CR3拷入CR0mtcrf FXM,RS --- MoveToConditionRegisterFields通用寄存器RS之32~63位以4CR的8RS0~FXM为域掩码,8位,从左到右编号为0~7,对应于RS、CR的8个域。某位为1,RSCR域中。若FXM为0x80CR0=RS0若FXM为0xc8,则将CR0=RS0,CR1=RS1,CR4=RS4mfcr RT --- MoveFromConditionRegister将CRRT的32~63位。整数指令整数访存指令整数比较指令整数陷阱指令整数移位指令XER指令其中以整数循环移位指令最为特别。整数访存指令LoadByte/Half-word/WordandZero该类指令从指定地址处读取8位、16位32位数据,置入高位置lbz/lbzu RT,D(RA)lbzx/lbzux RT,RA,RBlhz/lhzu RT,D(RA)lhzx/lhzux RT,RA,RBlwz/lwzu RT,D(RA)lwzx/lwzux RT,RA,RBRT,RA,RB皆为GPR,D+DRA[32:63]+RB[32:63]32位置。后缀u表示Update,即将有效地址更新到RA中后缀x表示Indexed,即使用RA+RB以上用于32位,对64位,上述指令皆加后缀'e'。则有效地址的0~31位,不再置0,其计算方式如下:RA+D,RA+RB。此外,用于64位的还有对双字操作的支持:lde/ldue/ldxe/lduxeLoadHalf-wordAlgebraiclha/lhau RT,D(RA)lhax/lhaux RT,RA,RB与lhz不同的是,该指令将所读取的半字的最高位(RT[48])填充到16位的补码有符号数。有效地址计算与上同;后缀u,x与上同。对64位情形,上述指令皆加后缀'e',有效地址计算与上小节同。LoadHalfword/WordByte-Reverse从指定地址处读取16位/32位数据,将字节反转后置入高位置lhbrx RT,RA,RBlwbrx RT,RA,RB如:lwbrx r3,r2,若r2+r1地址处的数据为则r3的结果为0xbb66aa55对64位情形,上述指令皆加后缀'e',有效地址计算与上小节同。LoadMultiplelmw RT,D(RA)该指令将RA+DRT~R31中,共读取31-T个字该指令无64位扩展。LoadStringWordlswiRT,RA,NB(后缀i,表示立即数Immediate)lswxRT,RA,RB(后缀x,表示Indexed寻址方式)加载nRT开始的寄存器中;当NB==0时n=32;NB!=0时n=NB,NB取值范围为0~31如r3=0x1000:lswi r4,r3,16则将0x1000处的16r4,r5,r6,r7对于lswx,要加载的字节数则位于XER[57:63]该指令无64位扩展。LoadWord/Doublewordandlwarx RT,RA,RB该指令与lwzx的差别在于,其还将处理器内部的RESERVE位置为1,并将有效地址对应的物理地址放入RESERVE_ADDR中。该指令的64位版本为:lwarxe RT,RA,差别还是在于有效地址的0~31不被置0此外还有一个ldarxe RT,RA,与lwarxe的差别在于其加载8字节的数据。这三条指令常分别与stwcx./stwcxe./stdcxe.MIPS之ll/sc令。Storestb/stbu RS,D(RA)stbx/stbux RS,RA,RBsth/sthu RS,D(RA)sthx/sthux RS,RA,RBstw/stwu RS,D(RA)stwx/stwux RS,RA,RB该类指令将RS中的8位、16位、32位数据写入有效地址处。后缀'u','x'之含义与3.3.1.1同。上述12条指令加后缀'e'则用于64位。有效地址计算与与3.3.1.1同。另用于64位的还有对双字操作的支持:stde/stdue/stdxe/stduxeStoreHalfword/WordsthbrxRS,RA,RBstwbrxRS,RA,RB将RS中的16/32bit小端序存储数据,亦或在小端系统上以大端序存储数据。对64位情形,上述指令皆加后缀'e',有效地址计算与上小节同。StoreMultiplesmw RS,D(RA)该指令将RS~R31中的数据(一个字,写入到RA+D处该指令无64位扩展。StoreStringWordstswi RS,RA,NB (后缀iImmediate)stswx RS,RA,RB (后缀x,表示Indexed寻址方式)与lswi/lswxRS开始的寄存器组中的n(于RA)当NB==0时n=32;NB!=0时n=NB,NB取值范围为0~31如r3=0x1000:stswi r4,r3,16则将r4,r5,r6,r7中的16字节数据依次写入0x1000处对于stswx,要加载的字节数则位于XER[57:63]该指令无64位扩展。3.3.1.toreWord/Doublewordstwcx. RS,RA,RB如果RESERVE位为1,且RA+RB对应的物理地址与RESERVE_ADDR一致,则将RS[32:63]的内容写入到RA+RBCR0[eq]位置为1RESERVE0。若条件不满足,则仅将CR0[eq]位置为0可用该指令与lwarx联用,实现li r0,1loop:lwarx r4,0,r3cmpwi r4,0 #r4[32:63]与0比较bneloopstwcw. r0,0,bne loopisync解锁则为:msyncli r0,stw r0,0(r3)下面的指令用于64位:stwcxe. RS,RA,RBstdcxe. RS,RA,RB320。整数算术运算指令整数逻辑运算指令整数比较指令cmpBF,L,RA,RBcmpiBF,L,RA,SI#RASI比较cmplBF,L,RA,RB#RA,RB逻辑比较。l--->logicalcmpliBF,L,RA,UI#RA与无符号立即数UI逻辑比较BF取值0~7CR域L为0,则为32位比较;为1,则为64位比较如:cmpi 0,0,r3,5若r3>5,则CR0[gt]=1;若r3<5,则CR0[lt]=1整数陷阱指令tw TO,RA,twi TO,RA,SITO位,从左到右标号为0~4Trap的条件。SI:SignedImmediate如:twi 0x10,r3,5则如果r3<5,则陷入异常。(32bit)比较,双字比较则用:td TO,RA,tdi TO,RA,SI整数移位指令RotaterlwimirlwinmRA,RS,SH,MB,MERA,RS,SH,MB,ME#RotateLeftWordImmediatethenMaskInsert#RotateLeftWordImmediatethenANDwithMaskrlwnmRA,RS,RB,MB,ME#RotateLeftWordthenANDwithMask以下是该指令的一些例子:allr11is:0x55aa67bbr0=0x00000000rlwimi r0,r11,8,0,r0is:0xaa67bb55r0=0x12345678rlwimi r0,r11,8,0,r0is:0xaa665678r0=0x12345678rlwimi r0,r11,8,28,r0is:0xa2345675即:取RS循环左移SH位后的WB到WE位,替换RA的WB到WE位。r0=0x00000000r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国移动5G网络升级改造方案规划及时间线
- 2026年关联词语专项训练题及答案解析
- 东北工业振兴申论题目及答案
- 加工厂生产考勤制度
- 公司无打卡考勤制度
- XX区实验初级中学2026年春季学期物理教研组实验教学优化方案
- 广东梅州市蕉岭县2025-2026学年八年级上学期期末数学试题(无答案)
- 少儿运动馆考勤制度
- 履约考勤制度
- 工作专班考勤制度
- 《智能制造单元集成应用》课件-智能制造单元概述
- 中学-学年第二学期教科室工作计划
- 2024年贵州省公务员考试《行测》真题及答案解析
- DB34T 3267-2024 公路养护工程设计文件编制规范
- GB/T 3163-2024真空技术术语
- GB/T 24203-2024炭素材料体积密度、真密度、真气孔率、显气孔率的测定方法
- 英语阅读理解50篇
- 催化剂导论课件
- 科技研发中心物业管理服务方案
- FZ∕T 74001-2020 纺织品 针织运动护具
- 全自动灯检机校准规范
评论
0/150
提交评论