




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
. 本文主要描述PPC的整数运算和跳转方面的指令,不涉及浮点数和系统指令如MMU、Cache、Exception等。PPC的由来1991年,IBM、Motorola、Apple联合定义了PowerPC 架构。PowerPC的主要特点有:采用RISC技术,同时引入少量复杂指令。这样降低计算机硬件设计复杂性,但对编译器和操作系统的要求更高;应用并行指令(超标量)处理技术. 指令集和CPU硬件协调发展,编译器可以更好地调整指令, 发挥超标量处理的性能;汇编指令集和编程语言结合得更好。CISC是早先内存受限的条件下发展的, 因为复杂的指令带来代码的减少.但目前内存已经不是关键问题,解码复杂和执行时间长成了指令处理的瓶颈.另外,IBM Berkely Stanford研究表明,如果指令集简单且大部分在一个周期内完成,运算性能会提高。因此采用RISC技术,可以降低指令复杂度,达到path length和cycle time number of cycles的平衡.相关背景资料:/books/proc/ppc/cwg/intro.html 详细介绍了PPC结构下编译器的指令调整技术。PPC寄存器描述为了方便指令流水线处理,PPC的汇编指令是等宽的,均为4字节,所以指令地址一定是4字节对齐的。PPC的一个特点是定义了大量的通用寄存器,如用于整数运算和寻址的通用寄存器GPR0-GPR31(General-Purpose Registers)共32个。在ABI(Application Binary Interface)规范中,GPR1用于堆栈指针、GPR3-GPR4用于函数返回值、GPR3-GPR10用于函数参数传递。用于浮点数运算的FPR0-FPR31(Floating-Point Registers)共32个,本文不做描述。状态寄存器CR(Condition Register),用于反映运算结果、跳转判断条件等。分为如下8组:每组4位,分别为LT(小于)、GT(大于)、EQ(等于)、SO(Summary overflow)。CR0默认反映整数运算结果、CR1默认反映浮点数运算结果。SO比较特殊,是XER寄存器SO位的拷贝。对于比较指令,很容易理解LT、GT、EQ的含意;对于算术运算指令,结果为负数则为LT、正数GT、0为EQ。 XER寄存器,反映运算过程的异常信息:OV溢出;SO是溢出保存,一旦发生溢出OV置位后,SO也置位,除非指令清除之;CA进位。Link Register 用于保存跳转指令的返回地址,也可以用于指定跳转的目标地址。Counter Register 用于条件跳转时,进行减1判断非0或为0的条件,也可以用于指定跳转的目标地址。PPC汇编语言说明学习汇编可以提高一些调试效率,如在线修改代码:清除某一段代码、修改特定地址的常量、不执行某个函数、跳转到另一个函数等等。学习汇编还可以深入理解编译器的实现,确认汇编实现和编程目的相同,对代码的正确性从另一个角度加以保证。对于PPC的目编文件,可以用此命令:D:Torandoppc20hostx86-win32binobjdumpppc -debugging -D -l -t -show-raw-insn %1.o %1.txt 得到包含反汇编后的文件。如:TestFunc3():D:FP8270de-2005-0613-1621default/D:/FP8270/FPS/src/FpsFpProc/source/Test.c:1800000010 a8 63 00 00 lhar3,0(r3)00000014 4e 80 00 20 blr这样方便研读由c语言生成的汇编程序。PPC一般采用大尾字节序,所以与X86相反,约定bit0为MSB、bit31为LSB。PPC汇编中,WORD为32位,HALF WORD 为16位,BYTE为8位。 此外为方便学习PPC汇编,这里提供了一个小程序,用于显示汇编指令码的各个字段。内存加载和保存指令通过寄存器立即数方式间接寻址:相关Load Mem指令:lbz、lbzu、lha、lhau、lhz、lhzu、lwz、lwzu指令格式:lbz 指令名称操作码英文解释中文解释lbz34Load Byte and Zero加载字节,目标寄存器的高三字节清零。lbzu35Load Byte and Zero with Update除了lbz的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lha42Load Half Word Algebraic加载双字节,目标寄存器的高双字节由加载的双字节最高BIT填充,即符号扩展。lhau43Load Half Word Algebraic with Update除了lha功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lhz40Load Half Word and Zero加载双字节,高16位清零。lhzu41Load Half Word and Zero with Update除了lhz的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lwz32Load Word and Zero加载四字节。lwzu33Load Word and Zero with Update除了lwz功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。相关Store Mem指令:stb、stbu、sth、sthu、stw、stwu指令格式:指令名称操作码英文解释中文解释stb38Store Byte保存寄存器低8位到内存。stbu39Store Byte with Update除了stb的功能外,EArA,所以rA = 0时,该指令无效。sth44Strore Half Word保存寄存器低16位到内存。sthu45Store Half Word with Update除了sth的功能外,EArA,所以rA = 0时,该指令无效。stw36Store Word保存寄存器到内存。stwu37Store Word with Update除了stw的功能外,EArA,所以rA = 0时,该指令无效。寄存器寄存器间接寻址:相关Load Mem指令:lbzx、lbzux、lhax、lhaux、lhzx、lhzux、lwzx、lwzux指令名称操作码子操作码英文解释中文解释lbzx3187Load Byte and Zero Indexed加载字节,目标寄存器的高三字节清零。lbzux31119Load Byte and Zero with Update Indexed除了lbzx的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lhzx31279Load Half Word and Zero Indexed加载双字节,高16位清零。lhzux31311Load Half Word and Zero with Update Indexed除了lhzx的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lhax31343Load Half Word Algebraic Indexed加载双字节,目标寄存器的高双字节由加载的双字节最高BIT填充,即符号扩展。lhaux31375Load Half Word Algebraic with Update Indexed除了lhax功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lwzx3123Load Word and Zero加载四字节。lwzux3155Load Word and Zero with Update除了lwz功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。相关Store Mem指令:stbx、stbux、sthx、sthux、stwx、stwux指令格式:指令名称操作码子操作码英文解释中文解释stbx31215Store Byte Indexed保存寄存器低8位到内存。stbux31247Store Byte with Update Indexed除了stb的功能外,EArA,所以rA = 0时,该指令无效。sthx31407Strore Half Word Indexed保存寄存器低16位到内存。sthux31439Store Half Word with Update Indexed除了sth的功能外,EArA,所以rA = 0时,该指令无效。stwx31151Store Word Indexed保存寄存器到内存。stwux31183Store Word with Update Indexed除了stw的功能外,EArA,所以rA = 0时,该指令无效。算术运算指令:寄存器与立即数间运算:指令名称操作码英文解释中文解释addi14Add ImmediaterA|0 与立即数相加,赋给rD。减立即数只要SIMM为负数即可。addic12Add Immediate CarryingrA 与立即数相加,赋给rD。减立即数只要SIMM为负数即可。还更新XER的CA位。addic.13Add Immediate Carrying and Record除addic功能外,还更新CR0的LT、GT、EQ、SO位。addis15Add Immediate ShiftedrA|0 + SIMM|0X0000 -rDsubfic08Sub From Immediate CarryingSIMM-rA 赋给rD,还更新XER的CA位。mulli07Multiply Low Immediate有符号乘法,rA * SIMM的低32位赋给rD。寄存器与寄存器间运算:指令名称操作码子操作码英文解释中文解释add add.addo addo.31266AddrA+rB-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。subfsubf.subfosubfo.3140Subtract FromrB-rA-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。addc addc.addco addco.3110Add CarryingrA+rB-rD,更新XER的CA位,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。subfcsubfc.subfcosubfco.318Subtract From CarryingrB-rA-rD,更新XER的CA位,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。addeadde.addeoaddeo.31138Add ExtendedrA+rB+XER(CA)-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。subfesubfe.subfeosubfeo.31136Subtract from ExtendedrB + rA + XER(CA)-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。mullwmullw.mullwomullwo.31235Multiply Low WordrA * rB 的低32位赋给rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。mulhwmullhw.3175Multiply High WordrA * rB 的高32位赋给rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),OE固定为0。mulhwumullhwu.3111Multiply High Word Unsigned无符号数乘法, rA * rB 的高32位赋给rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),OE固定为0。divwdivw.divwodivwo.31491Divde WordrA/rB-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。divwudivwu.divwuodivwuo.31459Divde Word Unsigned无符号数除法,rA/rB-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。指令名称操作码子操作码英文解释中文解释addmeaddme.addmeo addmeo.31234Add to Minus One ExtendedrA+XER(CA)-1-rD,更新XER(CA),如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。subfmesubfme.subfmeosubfmeo.31232Subtract from Minus One ExtendedrA+XER(CA)-1-rD,更新XER(CA),如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。addzeaddze.addzeoaddzeo.31202Add to Zero ExtendedrA+XER(CA)-rD,更新XER(CA),如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。subfzesubfze.subfzeosubfzeo.31200Subtrace from Zero ExtendedrA+XER(CA)-rD,更新XER(CA),如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。negneg.negonego.31104Negate-rA-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新XOR的SO、OV。比较指令:寄存器与立即数比较:指令名称操作码英文解释中文解释cmpi11Compare ImmediaterA与有符号数SIMM比较,结果存入指定的CR寄存器中07组之一组。在32位应用下,L为1是无效指令。cmpli10Compare Logical ImmediaterA与无符号数UIMM比较,结果存入指定的CR寄存器中07组之一组。在32位应用下,L为1是无效指令。寄存器与寄存器比较:指令名称操作码子操作码英文解释中文解释cmp310ComparerA与rB比较,结果存入指定的CR寄存器中07组之一组。在32位应用下,L为无关位。cmpl3132Compare LogicalrA与rB都作为无符号数比较,结果存入指定的CR寄存器中07组之一组。在32位应用下,L为1是无效指令。整数的逻辑运算指令:寄存器与立即数运算:指令名称操作码英文解释中文解释andi.28And ImmediaterS & UIMM -rA,更新CR0(LT、GT、EQ、SO)。andis.29And Immediate ShiftedrS & (UIMM rA,更新CR0(LT、GT、EQ、SO)。ori24OR ImmediaterS | UIMM -rAoris25OR Immediate ShiftedrS | (UIMM rAxori26XOR ImmediaterS UIMM -rAxoris27XOR Immediate ShiftedrS (UIMM rA寄存器与寄存器的逻辑运算:指令名称操作码子操作码英文解释中文解释andand.3128ANDrS & rB -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。oror.31444ORrS | rB -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。xorxor.31316XORrS rB -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。nandnand.31476NAND(rS & rB)-rA,如果Rc=1,还更新CR0 (LT、GT、EQ、SO)。nornor.31124NOR(rS | rB) -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。eqveqv.31284Equivalent(rS rB -rA),相当于BIT位相等则为1,如果Rc=1,还更新CR0 (LT、GT、EQ、SO)。andcandc.3160AND with ComplementrS & (rB) -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。orcorc.31412OR with ComplementrS | (rB) -rA,如果Rc=1,还更新CR0(LT、GT、EQ、SO)。单寄存器操作:指令名称操作码子操作码英文解释中文解释extsbextsb.31954Extend Sign ByterS的低8位做符号扩展,赋给rA。 如果Rc=1,还更新CR0(LT、GT、EQ、SO)。extshextsh.31922Extend Sign Half WordrS的低16位做符号扩展,赋给rA。 如果Rc=1,还更新CR0(LT、GT、EQ、SO)。cntlzwcntlzw.3126Count Leading Zeros Word从rS的最高位开始,统计rS的连续为0的BIT数,赋给rA。 如果Rc=1,还更新CR0(LT、GT、EQ、SO)。整数循环移位和移位指令:整数循环移位指令:指令名称操作码英文解释中文解释rlwinmrlwinm.21Rotate Left Word Immediate then And with MaskrS循环左移SH位,再保留MB和ME之间的位,其他位清零,把结果赋给rA。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。rlwimirlwimi.20Rotate Left Word Immediate then Mask InsertrS循环左移SH位,再保留MB和ME之间的位,其他位仍为rA的位,把结果赋给rA。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。指令名称操作码英文解释中文解释rlwnmrlwnm.23Rotate Left Word then And with MaskrS循环左移rB(取rB的低5位)位,再保留MB和ME之间的位,其他位清零,把结果赋给rA。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。整数移位指令:指令名称操作码子操作码英文解释中文解释slwslw.3124Shift Left WordrS左移rB(取rB的低5位,Bit27-Bit31)位, 右边空出的位清零,如果rB的Bit26为1,则rS全部移出,把移位结果赋给rA。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。srwsrw.31536Shift Right WordrS右移rB(取rB的低5位,Bit27-Bit31)位, 左边空出的位清零,如果rB的Bit26为1,则rS全部移出,把移位结果赋给rA。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。srawsraw.31792Shift Right Algebraic Word有符号数rS右移rB位,如4右移1位为2,-4右移1位为-2,负数能最多能移成-1。更新XER(CA)。如果Rc=1,还更新CR0(LT、GT、EQ、SO)。指令名称操作码子操作码英文解释中文解释srawisrawi.31824Shift Right Algebraic Word Immediate有符号数rS右移SH位,如4右移1位为2,-4右移1位为-2,负数能最多能移成-1。更新XER(CA)。如果Rc=1,还更新CR0(LT、G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电瓶电池知识培训内容课件
- 高空吊物安全知识培训课件
- 北京市社工证报考试卷及答案
- URAT1-inhibitor-13-生命科学试剂-MCE
- Dimethenamid-d3-生命科学试剂-MCE
- 北京安全员a考试题库及答案
- 软件开发服务合同(编号5)
- 护士转正考试题及答案
- 个人与团队管理机考试题及答案
- 真菌学考试题及答案
- 《福建省城镇道路清扫保洁作业指导价》
- 悬赏合同范例
- 《小儿腹泻的护理》课件
- 新人教版四年级英语上册教学计划
- 大数据时代到来的成因
- 储能电池模组PACK和系统集成项目可行性研究报告
- 新学期学校导览模板
- 教学常规管理要求
- 标准普尔《信用评级》方法概要
- 2024长沙劳动合同范本长沙劳动合同样本
- 2024年小学一年级新生入学开学第一课培训课件
评论
0/150
提交评论