power指令集 mysql_32位PowerPC常用指令集总结

本文介绍了PowerPC RISC体系结构,重点是e600内核的32位指令集,包括I-form、B-form、SC-form、D-form、X-Form、XL-Form、XFX-Form、XFL-Form、XS-Form和XO-Form等指令格式。详细解析了如bl、bc、stw、lwz、cmpi、cmpli等指令的用法,以及条件转移和存储器访问指令,并举例说明了如何利用指令进行数据处理和转移。
摘要由CSDN通过智能技术生成

第一部分 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寄存器

给出一段汇编指令示例:

0x1000051c

……

0x10000568:4b

ff ff ff b5 对应汇编:bl

10000051c

0x1000056c:38

00 00 00 对应汇编:li r0,0

解释:

bl 10000051c对应的机器指令为:

4b ff ff ff b5,其中的LK=0xed。

将LK*4符号扩展到32为对应的真值为-0x4c,而当前指令的地址为0x1000056c,所以跳转的目标地址就是0x1000056c+(-0x4c)=0x1000051c即为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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值