Pow erPC 体系结构之指令集 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) i = -s; else i = s * 8; return i; } int test_cyc1(int c) { int sum = 0; do { sum += c; c--; } while(c > 0); return c; } int 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 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 的相应位 10000418: 7c 03 03 78 mr r3,r0 -----> 此条指令多余 1000041c: 4d a1 00 20 bgtlr+ -----> 若 CR0[gt] 位为 1,则跳转到 LR 所存放的地址处,即直接函数返回了。此条指令等价于 bclr 13, 1 i = s; else if(s < 0) 10000420: 38 60 00 00 li r3,0 10000424: 4d 82 00 20 be...