PowerPC
-
PowerPc体系结构规范,发布于1993年,是一个64位规范也包含32位子集
-
ppc处理器有32个(32位或者64位)GPR 以及诸如PC(程序计数器,也称IAR/指令地址寄存器或者NIP/下一指令指针)、LR(链接寄存器)、FPSCR(浮点状态和控制寄存器)、CTR(计数寄存器)、FPR(浮点寄存器)、CR(条件寄存器)、等各种其他寄存器。有些ppc cpu还有32个64位FPR(浮点寄存器)
-
PowerPC处理器可以运行于两个级别,即用户模式和特权模式。用户模式下,仅有GPR,FPR,CR,FPSCR,LR,CTR,XER以及TBL/TBU可以访问。从Power ISA 2.05开始,DCR寄存器也可以在通过用户模式DCR访问指令进行访问。
-
注意 :指令中的“.”表示更新条件寄存器如add. rD,rB,rA
* 指令中的“c”表示:指令显示说明结果影响XER寄存器中的进位位【CA】如addc rD,rA,rB * 指令中的“e”表示:在指令中吧XER【CA】中的数据作为一个操作数,并在XER【CA】位记录进位位,如addr ,rA,rB * 指令中的字母“0”表示:溢出标识。对于整数,在XER【OA】位记录溢出和在CR0【so】记录溢出位,如addo rD,rA,rB -
PowerPC指令中, i后缀表示立即数,s后缀表示左移16位。例如addi、addis、ori、oris等。这段代码也可以用来读取某个变量的值,只需要把立即数替换成变量名。
-
配置寄存器
| 配置寄存器 | 作用 |
|---|---|
| HID0-HID2 | 硬件实现寄存器 |
| MSR | 机器状态寄存器(用来配置微处理器的设定) |
| MBAR | 存储器基址寄存器 |
| SVR | 系统处理器 |
| PVR | 版本寄存器 |
-
存储管理寄存器
| 存储管理寄存器 | 作用 |
|---|---|
| LBATOU/LBATOL/LBAT3U/LBAT3L | 指令BAT寄存器 |
| DBATOU/DBATOL/DBAT3U/DBAT3L | 数据BAT寄存器 |
| DMISS/DCMP/HASH1/HASH2/ICMP/RPA | 软件表搜索寄存器 |
| SDR1 | SDR1 |
| SR0-SR15 | 段寄存器 |
| SPRGs:SPRG0-SPRG7 | 中断处理寄存器 |
| DSISR | DSISR |
| SRP0 SRP1 | 保存恢复寄存器 |
| DEC | 多功能寄存器 |
| CSRR0-CSRR1 | 紧急中断寄存器 |
| DAR | 数据地址寄存器 |
| TBL-TBU | 时基设施(用于写) |
| IABR/IABR2/DABR/DABR2 | 指令/数据地址断点寄存器 |
| IBCR/DBCR | 指令/数据地址断点控制 |
| 通用寄存器 | 作用 |
|---|---|
| r0 | 在函数开始时使用 |
| r1 | 堆栈指针,相当于ia32架构中的esp寄存器, |
| r2 | 内容表指针,idapro吧这个寄存器反汇编标识为rtoc,系统调用时包含系统调用号 |
| r3 | 作为第一个参数和返回值 |
| r4-r10 | 函数或系统调用开始的参数 |
| r11 | 用在指针的调用或当做一些语言的环境指针 |
| r12 | 他用在异常处理个glink(动态链接器代码) |
| r13 | 保留作为系统线程id |
| r14-r31 | 作为本地变量非易失性 |
-
寄存器r1、r14-r31是非易失性的,意味着他们的值在函数调用过程中保持不变。
-
寄存器r0,r3-r12和特殊寄存器lr、ctr、xer、fpscr是易失性的,他们的值在系统调用过程中会发生改变。
-
r0 r2 r11和r12可能会被交叉模块调用改变,所以函数在调用的时候不能采用他们的值
-
条件代码寄存器字段cr0 cr1 cr5 cr6 cr7是易失性的。cr2 cr3 cr4 是非易失的,函数要改变他们必须保存并回复这些字段
-
AIX,svca指令,sc是PowerPC的助记符,表示系统调用,r2寄存器指示系统调用号。
-
r3-r10寄存器是给系统调用的参数,在执行系统调用指令之前有两个额外的先决条件,LR寄存器必须保存返回系统调用地址的值并且在系统调用前执行crorc cr6,cr6,cr6指令
异常处理器
- 整数异常寄存器xer是一个特殊功能寄存器,他包括一些对增加计算精度有用的信息和出错信息
- xer的格式如下
- so为总体溢出标志:一旦有溢出位,so就会置位
- ov为溢出标志:当发生溢出时置位,否则清零。
- ca位进位标志:当最高位产生进位时,置位,否则清零;扩展精度指令可以用ca作为操作符参与运算
存储加载指令
名称|助记符|语法格式|指令解释
---|:-------