PowerPC 体系结构之指令集

上传人:ji****72 文档编号:37534340 上传时间:2018-04-18 格式:DOC 页数:17 大小:57.50KB
返回 下载 相关 举报
PowerPC 体系结构之指令集_第1页
第1页 / 共17页
PowerPC 体系结构之指令集_第2页
第2页 / 共17页
PowerPC 体系结构之指令集_第3页
第3页 / 共17页
PowerPC 体系结构之指令集_第4页
第4页 / 共17页
PowerPC 体系结构之指令集_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《PowerPC 体系结构之指令集》由会员分享,可在线阅读,更多相关《PowerPC 体系结构之指令集(17页珍藏版)》请在金锄头文库上搜索。

1、PowerPC 体系结构之指令集体系结构之指令集 1. 概述概述Book E 定义的 PowerPC 指令集的指令可分为以下几类:分支跳转指令 CR 指令 整数指令 浮点指令 处理器控制指令 存储管理相关指令CR 指令主要是对 CR 内部位运算支持的一些指令,如 crand, cror, crxor 等等。2. 常用指令常用指令先看一个测试程序:-int test_call(int a, int b, int c) a = b + c; return a; int test_if(int s) int i; if(s 0) i = s; else if(s 0); return c; int

2、test_cyc2(int c) int sum = 0; for(; c 0; c-) sum += c;return c; int main() int a, b, c, d; a = test_if(5); b = test_cyc1(10); c = test_cyc2(10); d = test_call(1, 2, 3); return a + b + c + d; -引入的目的在于查看判断、循环和过程调用这些基本结构在 PowerPC 里怎么被支持。-O2 参数编译后,objdump -S -d 反汇编,则:-1000040c : int test_call(int a, int

3、 b, int c) a = b + c; return a; 1000040c: 7c 64 2a 14 add r3,r4,r5 - 对应 a, b, c 三个参数,同时 r3 又置返回 值 10000410: 4e 80 00 20 blr - 跳转到 LR 所存放的地址处,即函数返回10000414 : int test_if(int s) int i; if(s 0) 10000414: 7c 60 1b 79 mr. r0,r3 - r3 移到 r0,若 r0 小于、大于、等于 0, 则置 CR0 的相应位。指令后多一点,则说明该指令会据执行结果,设置 CR 的相应位 100004

4、18: 7c 03 03 78 mr r3,r0 - 此条指令多余 1000041c: 4d a1 00 20 bgtlr+ - 若 CR0gt 位为 1,则跳转到 LR 所存 放的地址处,即直接函数返回了。此条指令等价于 bclr 13, 1 i = s; else if(s 若 CR0eq 位为 1,则跳转到 LR 所存放的 地址处,也直接函数返回了。此条指令等价于 bclr 12, 2 i = -s; 10000428: 7c 60 00 d0 neg r3,r0 - r0 取反,入 r3 else i = s * 8; return i; 1000042c: 4e 80 00 20 b

5、lr - 跳转到 LR 所存放的地址处,函数返回10000430 : int test_cyc1(int c) 10000430: 34 03 ff ff addic. r0,r3,-1 10000434: 7c 69 03 a6 mtctr r3 10000438: 41 80 00 10 blt- 10000448 int sum = 0; do sum += c; c-; 1000043c: 38 63 ff ff addi r3,r3,-1 while(c 0); 10000440: 42 00 ff fc bdnz+ 1000043c return c; 10000444: 4e 8

6、0 00 20 blr 10000448: 38 00 00 01 li r0,1 1000044c: 7c 09 03 a6 mtctr r0 10000450: 4b ff ff ec b 1000043c 10000454 : int test_cyc2(int c) 10000454: 2c 03 00 00 cmpwi r3,0 10000458: 39 20 00 00 li r9,0 1000045c: 7d 23 48 1e .long 0x7d23481e int sum = 0; for(; c 0; c-) sum += c; return c; 10000460: 7d

7、 23 4b 78 mr r3,r9 10000464: 4e 80 00 20 blrint main() 10000468: 94 21 ff e0 stwu r1,-32(r1) 1000046c: 7c 08 02 a6 mflr r0 int a, b, c, d; a = test_if(5); 10000470: 38 60 00 05 li r3,5 10000474: 90 01 00 24 stw r0,36(r1) 10000478: 93 61 00 0c stw r27,12(r1) 1000047c: 93 81 00 10 stw r28,16(r1) 10000

8、480: 93 a1 00 14 stw r29,20(r1) 10000484: 4b ff ff 91 bl 10000414 10000488: 7c 7d 1b 78 mr r29,r3 b = test_cyc1(10); 1000048c: 38 60 00 0a li r3,10 10000490: 4b ff ff a1 bl 10000430 10000494: 7c 7b 1b 78 mr r27,r3 c = test_cyc2(10); 10000498: 38 60 00 0a li r3,10 d = test_call(1, 2, 3); 1000049c: 7f

9、 bd da 14 add r29,r29,r27 100004a0: 4b ff ff b5 bl 10000454 100004a4: 38 80 00 02 li r4,2 100004a8: 7c 7c 1b 78 mr r28,r3 100004ac: 38 a0 00 03 li r5,3 100004b0: 38 60 00 01 li r3,1 100004b4: 4b ff ff 59 bl 1000040c return a + b + c + d; 100004b8: 80 01 00 24 lwz r0,36(r1) 100004bc: 7f 9c 1a 14 add

10、r28,r28,r3 100004c0: 83 61 00 0c lwz r27,12(r1) 100004c4: 7c 7d e2 14 add r3,r29,r28100004c8: 83 81 00 10 lwz r28,16(r1) 100004cc: 83 a1 00 14 lwz r29,20(r1) 100004d0: 7c 08 03 a6 mtlr r0 100004d4: 38 21 00 20 addi r1,r1,32 100004d8: 4e 80 00 20 blr-3. 分类概述分类概述3.1 分支跳转指令分支跳转指令这类指令算是 PowerPC 里比较有特色的,

11、也是稍显复杂的。这类指令与 CR, LR 和 CTR 紧密相联,建构起判断、循环和过程调用这些程序的基本结构。其大致可分为四类:Branch Branch Conditional Branch Conditional to Count Register Branch Conditional to Link Register3.1.1 Branch这类指令与 CR 没有联系,即为非条件跳转,助记符后直接跟立即数地址。指令内为立即 数地址预留 26 位,即可跳转 226 大小的空间,如:(CIA, Current Instruction Address)b 0x20 - 以当前指令地址为基点,往后

12、跳转 0x20 字节,即 PC = CIA + 0x20 ba 0x20 - 直接跳转到地址 0x20 处。后缀为后缀为 a,则表示使用,则表示使用 Absolute Address,PC = 0x20。 bl 0x20 - 在 b 0x20 的基础上,将 LR 更新为 CIA + 4 bla 0x20 - 使用绝对地址,且更新 LR。后缀带后缀带 l,则表示更新,则表示更新 LR 为为 CIA + 4以上针对 32 位的情形,对 64 位则使用指令 be, bea, bel, bela 功能与上同。3.1.2 Branch Conditional此类为条件跳转指令。皆以 bc 开头,带 3

13、个操作数,如:bc BO, BI, BD bca BO, BI, BDbcl BO, BI, BD bcla BO, BI, BD后缀 a, l 的含义与 branch 类指令同。BO 指定跳转的条件,5 位;BI 指定关联的 CR 位,也是 5 位;BD 为跳转的立即数地址,16 位。其中以 BO 的编码最为复杂(BO 从左到右编号为 0 4):BO0: 为 1,则直接跳转 BO1: 为 1,则条件为真时,跳转。否则条件为假时,跳转 BO2: 为 1,则 CTR 不自动减 1 BO3: 为 1 时,则 CTR = 0 时跳转;为 0 时,则 CTR != 0 时跳转 BO4: 静态预测位,1 表示 unlikely,0 表示 likely 则常见的 BO 值: 20 (0b10100) 则表示无条件跳转 12

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号