




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PowerPC汇编指令集简析在了解PowerPC汇编指令前,需要先看下编程所用的寄存器模型,PowerPC系统结构为大多数运算指令都定义了Register-Register的操作,这些操作的源操作数从寄存器取得,或作为嵌入指令操作码中的立即数提供。这里的e300核可分为用户编程模型和管理员编程模型,该模型有32个GPR、32个FPR、特殊目的寄存器SPR和一些功能寄存器,下图为二者的示意图:上面这些寄存器可能不太好理解,因为名字和Intel汇编不一样,其实,可以这样理解,GPR就相当于EAX/EBX/ECX,而CTR则完全就是ECX的功能,是吧?区别就是没有堆栈而已咯。CR被分为8段,每段4位,分别代表LT、GT、EQ和SO(小于、大于、等于和溢出);LR用于记录跳转地址;特殊寄存器XER用于记录溢出和进位标志;FPSCR用于记录浮点运算类型和异常等。再看下指令集,大部分的CPU指令集可分为:数据读写、数值计算、流程控制和设备管理四个部分,由于PowerPC使用RISC,指令字长为32bit,Endian一般是可调的,默认为大端,另外,PowerPC没有栈,所以程序需要自己实现相关操作。首先为运算和逻辑指令,列举如下:它们与通用寄存器有关,源数据来自GPR 或16 位立即数,目的是GPR 寄存器,操作为32 位,GPR 中存放32 位更新数据。大多数指令都可以根据字面意思理解其作用,注意还有一个“cntlzw”指令,意为计算字中的第一个0,用于在一个字中找到1时将一个指令中的0的数量找出,它在决定例外寄存器中最高优先服务时有用。下面是数据读写指令,它们对数据在存储器中核通用寄存器中的传送很有用,若数据小于传送长度(单字,半字或字节),指令会使数据变位为32位,将不同位填0或符号扩展。指令列举如下:这里需要注意的是上面列举的lbz和lhz两个指令并不完全等同于mov al,ebx和mov ax,ebx+10这两个,因为前面两个是将字节和半字加载到r3时还清空了高位,而后两条指令只是加载数据到eax,并不会清空高位。另外,还有两个指令sthbrw和stwbrx,对PowerPC存取小端格式数据很有用,它们允许存取这样的数据,若数据以小端顺序进入总线,就把它存为大端顺序。好了,现在来详细看下赋值指令,下面是最常见的赋值代码:lis r3,0x1234addi r3,r3,0x5678这段代码的含义是将0x12345678加载到寄存器r3中。因为在RISC下,PowerPC的每条指令都是32bit,除去指令和寄存器参数编码,只剩下16bit的长度描述立即数,如立即数加载指令li:这样立即数SIMM只有16位,所以需要两次加载,使用lis(立即数载入并左移)和addi(立即数加法)两条指令完成。再看下PowerPC不同的子程序调用:cppview plaincopy1. func:/*子程序入口*/2. blr/*返回(跳转到lr地址)*/3. start:4. blfunc/*调用func(跳转并保存地址到lr)*/5. lir1,1/*设置r1、r3*/6. lir3,17. sc/*系统调用,结束程序*/这里的调用由PowerPC使用lr寄存器完成,在bl指令跳转前,下一条指令li r1,1的地址会被保存在lr,而执行的func中的blr时,系统会跳到lr表示的地址,完成返回。再来介绍下特殊寄存器的操作指令,它们可以完成特殊用途寄存器之间和通用寄存器之间的数据交换,不可以直接对特殊用途寄存器中的值进行处理,但是,可以将一个值先拷贝到一个通用寄存器上处理,再将信息存到特殊用途寄存器上。下面是指令集合:这里回顾下,PowerPC里没有堆栈,那用什么实现模拟呢?看下面的例子:cppview plaincopy1. f1:2. mflrr2/*保存lr中记录的地址到r2*/3. stwr2,-8(r1)/*记录r2的值到memr1-8*/4. addir1,r1,-60/*r1后移60个字节,完成进栈操作*/5. .6. addir1,r1,60/*r1前移60个字节,准备出栈*/7. lwzr2,-8(r1)/*读出老的lr值到r2*/8. mtfrr2/*将r2的内容复制到lr*/9. blr/*返回(跳转到lr地址)*/10. start:11. .12. blf1/*调用f1(跳转并保持地址到lr)*/ 看到了吧,虽然没有提供栈的相关指令(PUSH/POP/CALL/RET),但应用程序可以用r1模拟栈指针,实现多层调用对LR的记录和恢复。 前面说了,PowerPC指令为32位长,指令内仅有16位用于加载常量值,由于地址最多可达到64位,所以我们可以采用每次一段的方式载入地址,汇编程序中的符号指示汇编程序给出一个符号值的特殊处理形式:highest:表示一个常量的第48-63位;higher:表示一个常量的第32-48位;h:16-31位;l:0-15位。 下面是我们的一个稍大点的PowerPC汇编程序总结下上面的指令集,实现的功能就是载入两个值并相加,最后退出,以结果为状态代码输出。代码如下:1. #sum.s,第一个PowerPC汇编程序2. .data3. .align34. #此处装载两个值5. first_value:6. .quad17. second_value:8. .quad29. #写”.opd”(officialproceduredescriptor)10. .section“.opd”,”aw”11. .align312. #._start的程序描述符,即为程序名13. .global_start14. _start:15. .quad.start,.TOC.tocbase,016. #._text为程序代码段17. .text18. ._start:19. #装载地址高位20. lisr7,first_valuehighest21. orir7,r7,first_valuehigher22. #shifttheseuptothehigh-orderbits23. rldierr7,r7,32,3124. #装载地址低位25. orisr7,r7,first_valueh26. orir7,r7,first_valuel27. #将第一个值载入寄存器428. ldr4,0(r7)29. lisr7,second_valuehighest30. orir7,r7,second_valuehigher31. rldicrr7,r7,32,3132. orisr7,r7,second
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西安地质调查中心实习合同3篇
- 灯箱维修合同10篇
- 瓶装气企业安全培训课件
- DB14T 1953-2025 地面无机磨石材料应用技术规范
- 安全文明出行培训会议课件
- 分洪工程总体方案(3篇)
- 房屋工程方案小学作业(3篇)
- 广西嘉禾盛德金太阳再生资源有限公司汽车零部件再制造件表面处理工艺项目环境影响报告表
- 猫咪家族课件
- 猎人海力课件
- 2025年重庆市中考数学试卷真题(含标准答案)
- 旋挖钻机地基承载力验算2017.7
- 建立隐患闭环管理制度
- T/CECS 10026-2019绿色建材评价建筑门窗及配件
- 2025-2030中国甘草酸铵行业市场现状供需分析及投资评估规划分析研究报告
- 银川文化园全民健身体育运动馆地块土壤污染状况调查报告
- 明厨亮灶协议书
- 新药研究与开发技术 课件3.新药的工艺与质量研究
- “厂中厂”安全生产管理协议书(未修改版)7篇
- 《智能制造技术》课件 第4章 智能设计
- 类风湿关节炎健康教育
评论
0/150
提交评论