




已阅读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 0 x1234 addi r3 r3 0 x5678 这段代码的含义是将 0 x12345678 加载到寄存器 r3 中 因为在 RISC 下 PowerPC 的每条指令都是 32bit 除去指令和寄存器参数编码 只剩下 16bit 的长 度描述立即数 如立即数加载指令 li 这样立即数 SIMM 只有 16 位 所以需要两次加载 使用 lis 立即数载入并 左移 和 addi 立即数加法 两条指令完成 再看下 PowerPC 不同的子程序调用 cpp view plaincopy 1 func 子程序入口 2 blr 返回 跳转到 lr 地址 3 start 4 bl func 调用 func 跳转并保存地址到 lr 5 li r1 1 设置 r1 r3 6 li r3 1 7 sc 系统调用 结束程序 这里的调用由 PowerPC 使用 lr 寄存器完成 在 bl 指令跳转前 下一条指令 li r1 1 的地址会被保存在 lr 而执行的 func 中的 blr 时 系统会跳到 lr 表示的地 址 完成返回 再来介绍下特殊寄存器的操作指令 它们可以完成特殊用途寄存器之间和通用 寄存器之间的数据交换 不可以直接对特殊用途寄存器中的值进行处理 但是 可 以将一个值先拷贝到一个通用寄存器上处理 再将信息存到特殊用途寄存器上 下 面是指令集合 这里回顾下 PowerPC 里没有堆栈 那用什么实现模拟呢 看下面的例子 cpp view plaincopy 1 f1 2 mflr r2 保存 lr 中记录的地址到 r2 3 stw r2 8 r1 记录 r2 的值到 mem r1 8 4 addi r1 r1 60 r1 后移 60 个字节 完成进栈操作 5 6 addi r1 r1 60 r1 前移 60 个字节 准备出栈 7 lwz r2 8 r1 读出老的 lr 值到 r2 8 mtfr r2 将 r2 的内容复制到 lr 9 blr 返回 跳转到 lr 地址 10 start 11 12 bl f1 调用 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 data 3 align 3 4 此处装载两个值 5 first value 6 quad 1 7 second value 8 quad 2 9 写 opd official procedure descriptor 10 section opd aw 11 align 3 12 start 的程序描述符 即为程序名 13 global start 14 start 15 quad start TOC tocbase 0 16 text 为程序代码段 17 text 18 start 19 装载地址高位 20 lis r7 first value highest 21 ori r7 r7 first value higher 22 shift these up to the high order bits 23 rldier r7 r7 32 31 24 装载地址低位 25 oris r7 r7 first value h 26 ori r7 r7 first value l 27 将第一个值载入寄存器 4 28 ld r4 0 r7 29 lis r7 second value highest 30 ori r7 r7 second value higher 31 rldicr r7 r7 32 31 32 oris r7 r7 second v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年庆铃集团招聘考试真题
- 2025年教师美术考试试题及答案
- 2025年保安员考试必刷题库及完整答案一套
- 技术入股如何合作协议
- 2025年镇江中考数学试卷及答案
- 2025年绿色建筑技术师执业资格考试试题及答案
- 2025年消防安全应急处置员消防安全应急预案试题(附答案)
- 2025年科技创新与管理实践能力考试试题及答案
- 2025年霍乱培训试题及答案
- 2025年河北省秦皇岛市电工证考试题模拟试题初级电工试题(附答案)
- 2025年甘肃省定西市辅警考试真题及答案
- 2025年下半年全国教师资格证考试中学《综合素质》真题及答案
- 脑梗死恢复期护理查房范文讲课件
- 京东安全工程师笔试题库
- ISO 37001-2025 反贿赂管理体系要求及使用指南(中文版-雷泽佳译-2025)
- 中级职称专业技术人员考核登记表(最近三个年度)
- 部编版八年级语文上册定稿《一着惊海天》教案课堂实录(区级公开课)
- DL∕T 5597-2021 太阳能热发电工程经济评价导则
- 电大学前教育毕业论文
- 10kv高压无功补偿装置技术规范书
- 安防监控系统维保表格
评论
0/150
提交评论