PPC汇编培训资料.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PPC汇编培训资料

本文主要描述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:\Torandoppc20\host\x86-win32\bin\objdumpppc --debugging -D -l -t --show-raw-insn %1.o > %1.txt 得到包含反汇编后的文件。如: TestFunc3(): D:\FP8270de-2005-0613-1621\default/D:/FP8270/FPS/src/FpsFpProc/source/Test.c:18<TestFunc3> a8 63 00 00 lha r3,0(r3)<TestFunc3+4> 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 指令名称 操作码 英文解释 中文解释 lbz 34 Load Byte and Zero 加载字节,目标寄存器的高三字节清零。 lbzu 35 Load Byte and Zero with Update 除了lbz的功能外,EA->rA,所以rA = 0或者rA = rD时,该指令无效。 lha 42 Lo

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档