ppc 汇编入门指南

ppc 汇编入门指南

ID:6548491

大小:43.50 KB

页数:9页

时间:2018-01-17

ppc 汇编入门指南_第1页
ppc 汇编入门指南_第2页
ppc 汇编入门指南_第3页
ppc 汇编入门指南_第4页
ppc 汇编入门指南_第5页
资源描述:

《ppc 汇编入门指南》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、看懂PowerPC汇编,需要如下3方面的知识:  1.PowerPC指令集架构即PowerISA,可以从Power.org获得,包括寄存器定义,数据模型,寻址方式和指令定义以及指令助记符;  2.PowerPCABI即应用程序二进制接口,即寄存器的使用规范和栈调用结构;  3.PowerPCPseudo-ops,即.text,.alignn等汇编语言中常用的伪操作符。  PowerPCISA分为3个级别即“Book”,分别对应于用户指令集体系结构,虚拟环境体系结构和操作环境体系结构。其中BookIII分化出了服务器版本BookIII-S(经典PowerPC架构)和嵌入式

2、版本BookIII-E(专门为嵌入式优化的版本)。  1.寄存器定义:  PowerPC处理器寄存器分为2大类-专用寄存器和非专用寄存器。其中,非专用寄存器包括32个通用目的寄存器(GPR),32个浮点寄存器(FPR),条件寄存器(CR),浮点状态和控制寄存器(FPSCR);专用寄存器主要包括连接寄存器(LR),计数寄存器(CTR),机器状态寄存器(MSR)以及时间基准寄存器(TBL/TBU)等等。PPC4xx系列处理器还有DCR寄存器,需要用专门的指令访问。这里有两点需要注意:  1.PowerPC处理器可以运行于两个级别,即用户模式和特权模式。用户模式下,仅有GPR

3、,FPR,CR,FPSCR,LR,CTR,XER以及TBL/TBU可以访问。从PowerISA2.05开始,DCR寄存器也可以在通过用户模式DCR访问指令进行访问。  2.PowerPC处理器没有专用的栈指针寄存器和PC指针寄存器,也就是说硬件不负责维护调用栈。2.数据模型:  PowerPC支持如下数据格式:byte,halfword,word,doubleword,quadword,同时默认支持big-endian字节序,即MSB(最高有效字节,例如0x12345678中0x12即MSB)保存在低地址。little-endian字节序可以通过修改设置支持。  注意:

4、PowerPC习惯,msb(最高有效位)为bit0,lsb为bit31.3.寻址方式  PowerPC没有专门的IO操作指令,所有地址访问一视同仁,并且只支持地址和寄存器之间的访问。因此寻址方式非常简单,可以概括为2类6种:  3.1Load/store/算术/逻辑/cache指令:  a)寄存器间接寻址模式,通常写作RA或者RB;  b)寄存器间接立即数索引寻址模式,即(基址寄存器+立即数偏移)寻址模式,通常写作d(RA);  c)寄存器间接索引寻址模式(基址寄存器+偏移寄存器)寻址模式,通常写作RA,RB。  注意:对于三种模式,若寄存器为GPR0,则其内容被忽略,

5、并以0代替其内容。  3.2跳转指令:  a)立即数寻址模式;  b)链接寄存器(LR)模式,即目的地址被保存在LR中;  c)计数寄存器(CTR)模式,即目的地址保存在CTR中。  注意:实际上还有一些特殊的跳转指令rfi/rfci/rfmci,其目的地址保存在SRR0/CSRR0/MCSRR0中。4.指令定义和指令助记符:  PowerPC指令的长度都是4字节,但是种类繁多,而且有些指令极其复杂。因此,通常情况下,PowerPC汇编编程中采用指令和助记符混用的方式。助记符主要用来简化内存访问、算术运算、逻辑运算等常用指令,例如用bnetarget代替bc4,2,ta

6、rget表示不为零则跳转。下面仅以一些常见的汇编代码片段来做一些简单的归纳,具体信息请参考相应的处理器core用户手册或者PowerISA。注意,cache和MMU指令会跟其实现一起介绍,此处不再赘述。  4.1读取一个word(0x12345678)到目的寄存器  lisRA,0x12345678@h/*高16位(0x1234)偏移16位后变成0x12340000放进RA*/  oriRB,RA,0x12345678@l/*RA与低16位(0x5678)相或后构成完整数据放进RA*/  注意:PowerPC指令中,i后缀表示立即数,s后缀表示左移16位。例如addi、

7、addis、ori、oris等。这段代码也可以用来读取某个变量的值,只需要把立即数替换成变量名。  2.从某个地址(0x56789abc)读取数据  lisRA,0x56789abc@ha/*调整后的高16位(0x5679)偏移16位后变成(0x56790000)放进RA*/  lwzRB,0x56789abc@l(RA)/*RA加上低16位(0xffff9abc)构成完整数据地址,然后将其内容放进RB*/  注意:·@l,@h和@ha:用于算术运算的操作数(包括addi的操作数)时,@l获取的是符号扩展的低16位数据(0xffff9ab

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。