资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
word格式 本文主要描述PPC的整数运算和跳转方面的指令,不涉及浮点数和系统指令如MMU、Cache、Eception等。PPC的由来1991年,IBM、Motorola、Apple联合定义了PowerPC 架构。PowerPC的主要特点有:采用RISC技术,同时引入少量复杂指令。这样降低计算机硬件设计复杂性,但对编译器和操作系统的要求更高;应用并行指令(超标量)处理技术. 指令集和CPU硬件协调发展,编译器可以更好地调整指令, 发挥超标量处理的性能;汇编指令集和编程语言结合得更好。CISC是早先内存受限的条件下发展的, 因为复杂的指令带来代码的减少.但目前内存已经不是关键问题,解码复杂和执行时间长成了指令处理的瓶颈.另外,IBM Berkely Stanford研究表明,如果指令集简单且大部分在一个周期内完成,运算性能会提高。因此采用RISC技术,可以降低指令复杂度,达到path length和cycle time number of cycles的平衡.相关背景资料:http:/the.wall.riscom.net/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比较特殊,是ER寄存器SO位的拷贝。对于比较指令,很容易理解LT、GT、EQ的含意;对于算术运算指令,结果为负数则为LT、正数GT、0为EQ。 ER寄存器,反映运算过程的异常信息:OV溢出;SO是溢出保存,一旦发生溢出OV置位后,SO也置位,除非指令清除之;CA进位。Link Register 用于保存跳转指令的返回地址,也可以用于指定跳转的目标地址。Counter Register 用于条件跳转时,进行减1判断非0或为0的条件,也可以用于指定跳转的目标地址。PPC汇编语言说明学习汇编可以提高一些调试效率,如在线修改代码:清除某一段代码、修改特定地址的常量、不执行某个函数、跳转到另一个函数等等。学习汇编还可以深入理解编译器的实现,确认汇编实现和编程目的相同,对代码的正确性从另一个角度加以保证。对于PPC的目编文件,可以用此命令:D:Torandoppc20host86-win32binobjdumpppc -debugging -D -l -t -show-raw-insn %1.o %1.tt 得到包含反汇编后的文件。如: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一般采用大尾字节序,所以与86相反,约定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指令:lbz、lbzu、lha、lhau、lhz、lhzu、lwz、lwzu指令名称操作码子操作码英文解释中文解释lbz3187Load Byte and Zero Indeed加载字节,目标寄存器的高三字节清零。lbzu31119Load Byte and Zero with Update Indeed除了lbz的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lhz31279Load Half Word and Zero Indeed加载双字节,高16位清零。lhzu31311Load Half Word and Zero with Update Indeed除了lhz的功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lha31343Load Half Word Algebraic Indeed加载双字节,目标寄存器的高双字节由加载的双字节最高BIT填充,即符号扩展。lhau31375Load Half Word Algebraic with Update Indeed除了lha功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。lwz3123Load Word and Zero加载四字节。lwzu3155Load Word and Zero with Update除了lwz功能外,EArA,所以rA = 0或者rA = rD时,该指令无效。相关Store Mem指令:stb、stbu、sth、sthu、stw、stwu指令格式:指令名称操作码子操作码英文解释中文解释stb31215Store Byte Indeed保存寄存器低8位到内存。stbu31247Store Byte with Update Indeed除了stb的功能外,EArA,所以rA = 0时,该指令无效。sth31407Strore Half Word Indeed保存寄存器低16位到内存。sthu31439Store Half Word with Update Indeed除了sth的功能外,EArA,所以rA = 0时,该指令无效。stw31151Store Word Indeed保存寄存器到内存。stwu31183Store Word with Update Indeed除了stw的功能外,EArA,所以rA = 0时,该指令无效。算术运算指令:寄存器与立即数间运算:指令名称操作码英文解释中文解释addi14Add ImmediaterA|0 与立即数相加,赋给rD。减立即数只要SIMM为负数即可。addic12Add Immediate CarryingrA 与立即数相加,赋给rD。减立即数只要SIMM为负数即可。还更新ER的CA位。addic.13Add Immediate Carrying and Record除addic功能外,还更新CR0的LT、GT、EQ、SO位。addis15Add Immediate ShiftedrA|0 + SIMM|00000 -rDsubfic08Sub From Immediate CarryingSIMM-rA 赋给rD,还更新ER的CA位。mulli07Multiply Low Immediate有符号乘法,rA * SIMM的低32位赋给rD。寄存器与寄存器间运算:指令名称操作码子操作码英文解释中文解释add add.addo addo.31266AddrA+rB-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新OR的SO、OV。subfsubf.subfosubfo.3140Subtract FromrB-rA-rD,如果Rc=1,还更新CR0(LT、GT、EQ、SO),如果OE=1,还更新OR的SO、OV。addc addc.addco addco.3110Add CarryingrA+rB-rD,更新ER的CA位,如果Rc=1,还更新CR0(L
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号