




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
32 位位 PowerPC 常用指令集总结常用指令集总结 第一部分第一部分 PowerPC 精简指令集计算机精简指令集计算机 RISC 简介简介 PowerPC 体系结构是一种精减指令集计算机 Reduced Instruction Set Computer RISC 体 系结构 定义了 200 多条指令 PowerPC 之所以是 RISC 原因在于大部分指令在一个单 一的周期内执行 而且通常只执行一个单一的操作 比如将内存加载到寄存器 或者将寄 存器数据存储到内存 PowerPC 体系结构分为三个级别 或者说是 book 通过对体系结构以这种方式进行划 分 为实现可以选择价格 性能比平衡的复杂性级别留出了空间 同时还保持了实现间的代 码兼容性 Book I 用户指令集体系结构 Power ISA User Instruction Set Architecture 定义了通用于所有 PowerPC 实现的用户指令和寄存器的基本集合 这些是非特权指令 为大多数程序所用 Book II 虚拟环境体系结构 Power ISA Virtual Environment Architecture 定义了常规应用软件要求之外的附加的用户级功能 比如高速缓存管理 原子操作和用户 级计时器支持 虽然这些操作也是非特权的 但是程序通常还是通过操作系统调用来访问 这些函数 Book III 操作环境体系结构 Power ISA Operating Environment Architecture 定义了操作系统级需要和使用的操作 其中包括用于内存管理 异常向量处理 特权寄存 器访问 特权计时器访问的函数 Book III 中详细说明了对各种系统服务和功能的直接硬 件支持 由于我目前手上的开发板是基于 e600 内核 所以我在学习 PowerPC 指令集的过程中 顺 便总结了 e600 内核常用的指令集 如果大家发现我总结的指令集有错误或者不准确的地方 欢迎留言指出来 O O 第二部分第二部分 e600 指令集指令集 飞思卡尔的 e600 内核实现了 booke 内核构架中 64 位指令集的中的 32 位指令 即在 e600 的 32 位寄存器中 第 0 位相当于 booke 中的 64 寄存器的第 32 位 第 31 位相当于 booke 中 64 寄存器的第 63 位 E600 内核采用大端编码方式 指令的第 0 位是 MSB Most Significant Bit 位 第 31 位是 LSB Least Significant Bit e600 内核指令的高 6 位字段 第 0 5 位 被称为 OPCD 字段 Primary Opcode Field 根 据 OPCD 字段的不同 PowerPC 的指令集分为以下几类 2 1 I form 指令格式 该类是无条件转移指令 0 5 6 29 30 31 OPCD LI AA LK AA 0 表示 LI 中存放的是相对地址 LI 4 基址是当前指令的地址 AA 1 表示 LI 中存放的是绝对地址 LI 4 LK 1 表示转移到目的地址的同时 将当前指令的下一条指令存入 LR 寄存器 LK 0 仅仅表示跳转到目的地址 而不用修改 LR 寄存器 例如 b LI AA 0 LK 0 解释 跳转到目的地址 LI 4 当前指令的地址 ba LI AA 1 LK 0 解释 跳转到 LI 4 bl LI AA 0 LK 1 解释 跳转到目的地址 LI 4 PC 同时把 PC 4 放入 LR 寄存器 备注 PC 放的是当前指令的地址 bla LI AA 1 LK 1 解释 跳转到目的地址 LI 4 同时把 PC 4 放入 LR 寄存器 给出一段汇编指令示例 0 x1000051c 0 x10000568 4b ff ff ff b5 对应汇编 bl 10000051c 0 x1000056c 38 00 00 00 对应汇编 li r0 0 解释 bl 10000051c对应的机器指令为 4b ff ff ff b5 其中的 LK 0 xed 将 LK 4 符号扩展到 32 为对应的真值为 0 x4c 而当前指令的地址为 0 x1000056c 所以跳 转的目标地址就是 0 x1000056c 0 x4c 0 x1000051c 即为 print 函数的入口地址 因此如果想获得下一条指令的有效地址可以使用下面的汇编代码 bl invstr 将当前指令的下一条指令 PC 4 放入 LR 寄存器 invstr mflr r6 将 LR 寄存器的内容放入 r6 寄存器中 2 2 B Form 指令格式 该类为有条件转移指令 0 5 6 10 11 15 16 29 30 31 OPCD BO BI BD AA LK 包含下面 4 条指令 bc BO BI BD AA 0 LK 0 bca BO BI BD AA 1 LK 0 bcl BO BI BD AA 0 LK 1 bcla BO BI BD AA 1 LK 1 解释 AA 和 LK 的含义同上 下面详细介绍一下 BO BI BD 字段的含义 BO 字段 从 6 位至 10 位 共 5 bit BO 0 为 1 表示根据 CTR 寄存器是否为 0 进行转移 为 0 根据 CR 寄存器的相应字段和 BI 字段中的条件进行转移 BO 1 为 1 指定的条件为真时转移 为 0 指定的条件为假时转移 BO 2 为 1 执行 bc 指令时 CTR 寄存器保持不变 为 0 执行 bc 指令时 CTR 寄存器自减 BO 3 为 1 CTR 寄存器为 0 时进行条件转移 为 0 CTR 寄存器非 0 时进行条件转移 BO 4 为 1 bc 指令将被判断为执行转移功能 处理器将预取转移指令目标地址后面的几条 指令 并将预先取得的指令放入缓冲对列 为 0 bc 指令不被判断为执行转移功能 不预取转移指令目标地址后面的几条指令 BI 字段 11 15bit 的功能 BI 0 2 的值 n n 在 0 到 7 之间 指出 CR 寄存器中的 CRn 字段的状态作为指令跳转条 件 BI 3 4 的值表述指令跳转条件 具体如下 00 使用 LT 小于 状态作为指令的转移条件 01 使用 GT 大于 状态作为指令的转移条件 10 使用 EQ 等于 状态作为指令的转移条件 11 使用 SO 溢出 状态作为指令的转移条件 BD 字段 16 29bit 指出转移的目标地址 现在我们给我几个例子 bc 16 0 BD 解释 BO 0 为 1 表示根据 CTR 寄存器是否为 0 进行转移 和 CR 寄存器无关了 BO 2 为 0 执行 bc 指令时 CTR 寄存器自减 BO 3 为 0 CTR 寄存器为非 0 时进行条件转移 BO 4 为 0 bc 指令不被判断为执行转移功能 不预取转移指令目标地址后面的几条指令 综上 该指令的意思是将 CTR 寄存器自减 如果 CTR 不为 0 则跳转到 BD 指示的地址处 可以使用指令助记符 bdnz BD 表示 CTR 寄存器自减 如果 CTR 不为 0 则跳转到 BD 指 示的地址处 bc 4 2 BD BO 0 为 0 根据 CR 寄存器的相应字段和 BI 字段在中的条件进行转移 BO 1 为 0 指定的条件为假时转移 BO 2 为 1 执行 bc 指令时 CTR 寄存器保持不变 BI 0 2 的值为 0 指出 CR 寄存器中的 CR0 中的状态作为指令跳转条件 BI 3 4 的值为 10 使用 EQ 等于 状态作为指令的转移条件 综上 该指令的意思是说只有比较结果不等于 0 就转移 可以使用指令助记符 bne BD 来代表 bc 4 2 BD 备注 目标地址是相对地址 还是绝对地址要看 AA 标识是否置位 常用的指令助记符 lt 小于 le 小于等于 eq 等于 so 溢出 转移被静态预测 为真 选择转移 转移被静态预测为假 不选择转移 等等 在 Powerpc 指令集中常用的条件转移指令只有 bc bcl 以前的转移指令 beq ndnz ble 等 等都是助记符 2 3 SC Form 指令 该指令主要用来实现系统调用 只有 sc 这一条汇编 比较简单 2 4 D Form 指令 该指令一定包含一个立即数 指令格式如下 0 5 5 10 11 15 16 31 OPCD RS RT RA D RS RT 存放该条指令运算结果的寄存器的索引 RA 存放源数据的寄存器索引 D 存放该指令需要的另一个立即数数据源 该指令格式包含两类 1 对存储器或者寄存器进行读写的指令 2 立即数的算术运算和逻辑运算指令 典型指令如下 2 4 1 Load Word and Zero 指令 lwz RT D RA 语义 if RA 0 then b 0 else b RA EA b extsign D RT 32 个连续的 0 连上 MEM EA 4 解释 extsign D 表示 D 符合扩展到 32bit 因为 D 是 16 bit 参与运算的是 32bit MEM EA 4 表示从 EA 地址处取得 32 位数据 该指令的目的就是将 RA D 指定的地址中读取一个 32 位的数据 然后将此数据传递给 RT 寄存器 此外还有对 16 bit 和 8 bit 进行操作的 lhz lbz 指令 2 4 2 STore Word 指令 stw RS D RA 和 lwz 指令想反 将寄存器 RS 中的 32 位数存到 RA D 指向的内存单元处 备注 立即数 D 参与的寻找计算 都需要将 D 符号扩展至 32 位 2 4 3 Load Word and Zero with Update 指令 lwzu RT D RA 解释 将 D RA 指向的内存单元的值放入 RT 索引的寄存器 然后将 RA 寄存器的值更新 为 RA D 2 4 5 Store Word with Update 指令 stwu RS D RA 同 lwzu 相反 备注 这两条指令可以实现数据栈的压栈和出栈操作 另外还有对 8 位和 16 位数据进行操 作的指令 lbzu stbu 和 sthu lhzu 指令 格式通上 2 4 6 介绍两条批处理指令 Load Multiple Word 指令 lmw RT D RA 语义 if RA 0 then b 0 else b RA EA b EXTS D r RT do while r 31 GPR r 32 个连续 0 MEM EA 4 表示字符串的连接 例如 a b 就是 ab r r 1 EA EA 4 endwhile 解释 将 RA D 地址处的数据依次传递到 RT 至 31 中 传递的 32 位数据量 32 RT 个 Store Multiple Word 指令 stmw RS D RA 解释 将 RS 至 R31 的 32 RS 个数据依次传递到 RA D 指向的内容地址处 备注 使用这两个寄存器时要注意存储器的边界检查和所使用到的通用寄存器是否需要备 份 2 4 7 Compare Immediate 指令 cmpi BF L RA SI 语义 n BF 表示的数值 if L 0 then a EXTS RA 32 63 else a RA if a EXTS SI then c EXTS SI then c 0b010 大于时设置 CRn 1 为 1 else c 0b001 等于时设置 CRn 2 为 1 CR 寄存器中的 4 BF 32 4 BF 35 c XER 寄存器中 SO 位 表示字符连接 解释 将寄存器 RA 与立即数 SI 进行比较 然后将比较指令产生的状态放入 CR 寄存器的不同字 段中 CR 寄存器有 8 个 CRn 字段 n 从 0 至 7 可以由三 bit 位的 BF 段指定 L 表示是进行 32 位还是 64 的比较 对于 e600 而言 只有 L 0 的比较 备注 解释一下 CR 寄存器 e600 中 32 位 CR 寄存器用来存放指令执行之后的状态 该寄存器分 为 8 个字段 分别为 CR0 CR1 CR7 每个字段都由 4bit 组成 各个字段 CRn n 从 0 至 7 都可以表示响应指令执行的结果 比如整数的加减及逻辑运算 使用 CR0 来存放状态 CR0 的四个 bit 位的含义如下 CR0 0 用来表示 LT 小于 当整型指令运算结果为负时置 1 CR0 1 用来表示 GT 大于 当整型指令运算结果为正时置 1 CR0 2 用来表示 EQ 等于 当整型指令运算结果为 0 时置 1 CR0 3 用来表示 SO 溢出 当整型指令运算结果溢出时置 1 同理浮点数的运算使用 CR1 来保存运算状态 保存过程同上 e600 的比较指令可以使用 CR 寄存器的全部的 CRn n 从 0 至 7 来保存运算的结果 一般在比较指令 cmp 之后都会 有一个条件跳转指令 比如 bc 指令 其中 cmp 指令可以指定由 CR 寄存器的 CRn 段来保 存结构 比如上面的 cmpi 指令就用 BF 来指定 CRn 字段 一般而言 bc 指令就会更新 cmp 中相同的 CRn 段来决定条状 2 4 8 Compare Logical Immediate 指令 cmpli BF L RA UI 和 cmpli 的指令的用法相同 所不同的是 cmpli 是无符号数直接的比较 而 cmpi 是有无符号之间的比较 2 4 9 Trap Word Immediate 指令 twi TO RA SI 解释 该指令称之为陷阱 trap 指令 该指令对一些 Trap 条件进行测试 如果条件成立 则处理器进入系统的 trap 程序 然后对 trap 事件进行处理 TO 字段 有 5 位 第 0 至 4 位此次表示 LTS 有符号式比较 小于 GTS 有符号数比较 大于 EQ 有符号数比较 等于 LT 无符号数比较 小于 GT 无符号数比较大于 比如 如果用户将 TO 设置为 1 并且 RA 中的有符号数小于立即数 SI 符合扩展之后 则处理器进程 Trap 处理程序 备注 如果把立即数 SI 换成寄存器索引 RB 则 tw TO RA RB 就是 X Form 形式 tw 31 r0 r0 就是一个无条件 trap 指令 可用助记符 trap 表示 另外 D Form 指令包含了很多用于算术和逻辑运算的指令 这些指令都是需要一个立即数 的 由于这些立即数都是在指令中的 这样在 e600 内核中 这些立即数的长度只能限制在 16 位 为了能顺利的处理 32 位的立即数 e600 内核中的 D Form 指令可以在立即数的计 算时把立即数左移 16 位 这样我们就可以用两条指令就可以把一个立即数放到一个通用计 算器中 例如 读取一个 word 0 x12345678 到目的寄存器 lis RA 0 x12345678 h 高 16 位 0 x1234 偏移 16 位后变成 0 x12340000 放进 RA ori RB RA 0 x12345678 l RA 与低 16 位 0 x5678 相或后构成完整数据放进 RA 备注 PowerPC 指令中 i 后缀表示立即数 s 后缀表示左移 16 位 例如 addi addis ori oris 等 这段代码也可以用来读取某个变量的值 只需要把立即数替换 成变量名 从某个地址 0 x56789abc 读取数据 lis RA 0 x56789abc ha 调整后的高 16 位 0 x5679 偏移 16 位后变成 0 x56790000 放进 RA lwz RB 0 x56789abc l RA RA 加上低 16 位 0 xffff9abc 构成完整数据地址 然后将其内 容放进 RB 注意 用于算术运算的操作数 包括 addi 的操作数 时 l 获取的是符号扩展的低 16 位数据 0 xffff9abc 因此高 16 位必须进行根据 bit15 进行调整 而不能简单的使用 h 来获取 2 5 X Form 指令 E600 中 X Form 指令的数量最多 D form 指令的每一个指令在 X Form 中都有对应的指令 除此之外 X Form 指令还有一些专用的指令 X Form 的指令格式如下 0 5 6 10 11 15 16 20 21 30 31 OPCD TS RT RA RB XO Rc X Form 的指令格式与 D Form 指令格式 0 5 5 10 11 15 16 31 OPCD RS RT RA D 相比 只是将 D Form 指令中的 D 字段差分为 RB XO 和 Rc 字段 X Form 中的 RB 和 RS 字段存放源操作数寄存器的索引 RT 字段存放目的操作数的索引 RA 字段既可以存放源操作数寄存器的索引 而言可以存放目的操作数的索引 Rc 字段置 1 表示当前指令的运算结果将改变 CR 寄存器中的相应 CRn 段 具有 的后缀 的指令 其 Rc 位置 1 典型的 X Form 指令如下 存储器访问类指令 lbzx lhzx lhax lwzx stbx sthx stwx lbzux lhzux lwzux stbux sthux stwux 指令等 这些指令和 D Form 中的 lbz lhz lha lwz stb sth stw lbzu lhzu lwzu stub sthu stwu 一 一对应 所不同的是 D Form 使用的立即数 换成了 X Form 使用的寄存器索引 字节序列交换指令 lhbrx lwbrx sthbrx stwbrx 指令 这些指令的作用是调整字节序列 比较类指令和 trap 指令 cmp cmpl tw 指令 算术逻辑运算指令 and or xor nand nor eqv 指令 Count Leading Zeros Word 指令 cntlzw RA RS 备注 该指令找出 RS 寄存器中从左边开始第一个不为 0 的位 然后将该位所在的位序 从 0 开始 存入 RA 中 2 6 XL Form 指令 XL Form 指令支持条件转移指令 与 B Form 类条件转移指令 B Form 指令格式 有条件转移指令 0 5 6 10 11 15 16 29 30 31 OPCD BO BI BD AA LK 不同 该类指令使用 LR 寄存器或者 CTR 寄存器 而不适用 16 位的立即数作为跳转目标 XL Form 指令格式 0 5 6 10 11 15 16 18 19 20 21 30 31 OPCD BO BI BH 16 或者 528 LK 所支持的指令格式 bclr BO BI BH LK 0 21 30 字段值为 16 bclrl BO BI BH LK 1 21 30 字段值为 16 bcctr BO BI BH LK 0 21 30 字段值为 528 bcctrl BO BI BH LK 1 21 30 字段值为 528 X Form 类指令的 BO BI 字段值和 B Form 类中的 BO BI 字段含义相同 LK 置 1 表示跳 转指令执行后 LR 寄存器指向下一条指令的地址 当前指令地址 4 BH 字段用于静态 分支预测 当条件满足时 bclr 和 bclrl 指令使用 LR 寄存器进行长条状 而 bcctr bcctrl 指令使用 CTR 寄存器进行长跳转 于 B Form 指令类似 X Form 指令也使用了很多助记符 比如 blr 相当于 bclr 20 0 备注 XL Form 指令和 I Form 指令协作完成指令的跳转 例子如下 备注 blr 是 XL Form 指令 bc 是 I Form 指令 XL Form 指令还可以支持 CR 寄存器不同段 CRn 的与 或 异或 同或操作 指令格式如 下 0 5 6 10 11 15 16 20 21 30 31 OPCD BT BA BB 257 449 193 225 0 这里举出以下几种指令 crand BT BA BB 第 21 30 字段为 257 BT BA否则 MB 到 ME 之间的位清 0 其他位包括这两位置 1 形成 MASK 例子 1 从立即数 0 x12345678 RS 中抽取 bit 20 23 并左移 16 位 从而得到 0 x06000000 rlwinm rA rS 16 4 7 具体过程 0 x12345678 循环左移 16 位得到 0 x56781234 然后与 MASK 0 x0f00 0000 MASK 4 7 相与 该指令可以用来抽取 C 语言代码或者寄存器中的位域 例子 2 清除立即数 0 x12345678 RS 的 bit28 31 并左移 24 位 从而得到 0 x0012 3456 rlwinm rA rS 24 8 31 具体过程如下 0 x12345678 循环左移 24 位得到 0 x78123456 然后与 MASK 0 x00ff ffff MASK 8 31 相与 例子 3 清除立即数 0 x12345678 RS 的 bit 6 从而得到 0 x10345678 rlwinm rA rS 0 7 5 具体过程 0 x12345678 循环左移 0 位 仍是 0 x56781234 然后与 MASK0 xfdff ffff MASK 7 5 相与 功能 该指令可以用来清除 C 语言代码或者寄存器中的位域 2 8 2 Rotate Left Word then AND with Mask 指令 rlwnm RA RS RB MB ME Rc 0 rlwnm RA RS RB MB ME Rc 1 指令 0 5 6 10 11 15 16 20 21 25 26 30 31 23 RS RA RB MB ME Rc 解释 类似于上一条指令 只是把左移的位数放到了寄存器 RB 中 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年区块链技术在物流行业应用前景与挑战分析报告
- 2025年智能制造技术在工业0时代的应用前景研究报告
- 商场保安安全培训计划课件
- 国家事业单位招聘2025自然资源实物地质资料中心招聘拟聘用人员笔试历年参考题库附带答案详解
- 四川省2025年四川资阳市雁江区引进急需紧缺专业人才笔试历年参考题库附带答案详解
- 北京市2025北京邮电大学人工智能学院招聘2人(人才派遣)笔试历年参考题库附带答案详解
- 2025福建厦门海沧湾投资开发有限公司招聘笔试参考题库附带答案详解
- 2025甘肃人力委托招聘风电叶片主修岗位10人笔试参考题库附带答案详解
- 2025广西北海市小微企业融资担保有限公司招聘实习生6人笔试参考题库附带答案详解
- 2025年贵州乌江水电开发有限责任公司大学毕业生招聘若干人笔试参考题库附带答案详解
- 人教版(新教材)高中生物选择性必修1课件3:4 3 免疫失调
- 《SLT 582-2025水工金属结构制造安装质量检验检测规程》知识培训
- “燕园元培杯”2023-2024学年全国中学生地球科学奥林匹克竞赛决赛试题详解
- 中国血脂管理指南(基层版+2024年)解读
- 分子诊断技术在感染性疾病中的应用-深度研究
- 《智能AI分析深度解读报告》课件
- 气道异物护理教学
- 2024年版机电产品国际招标标准招标文件
- 企业合规经营规范手册
- 企业员工心理健康与欺凌防范政策
- 四川省兴文县建设煤矿2021年矿山储量年报
评论
0/150
提交评论