PowerPc上的每条指令都正好是32位长的,指令的opcode(操 作符,告诉处理器这条指令是什么的代码)占据了前6位。这个32位的长度包含了所有的立即寻址模式的值、寄存器引用、显式地址以及指令选项。这实现了非常好的压缩。实际上,内存地址对于任何指令格式可以使用的最大长度只有24位,最大只能为我们提供16Mb的可寻址空间。但不要担心 —— 有很多方法都可以解决这个问题。这只是为了说明为什么指令格式在 PowerPC 处理器上是如此重要 —— 我们需要知道自己到底需要使用多少空间!
其实不必记住所有的指令格式就能使用它们。然而,了解一些指令的基本知识可以帮助我们读懂 PowerPC 文档,并理解 PowerPC 指令集中的通用策略和一些细微区别。PowerPC 一共有 15 种不同的指令格式,很多指令格式都有几种子格式。但只需要关心其中的几种即可。下面看下基址用于寻址的指令格式:
使用D-Form和DS-Form指令格式对内存寻址
D-Form指令是主要的内存访问指令格式之一,它格式如下:
0-5位:操作码
6-10位:源/目标寄存器
11-15位:地址/索引寄存器/操作数
16-31位:数字地址、偏移量或立即寻址模式值
此格式可用来加载、存储和立即寻址模式的计算,可用于包括立即寻址模式、直接寻址模式(指定地址/索引寄存器为0)、索引寻址模式、间接寻址模式(指定地址为0)和基地址寻址模式等寻址方式。
D-Form指令非常灵活,可用于任何寄存器加地址的内存访问模式。然而,对于直接寻址和索引寻址来说,它的用处就比较有限了,因为它只能使用一个16位的地址域,所以其提供的最大寻址范围是64K。对于立即寻址、间接寻址和基地址寻址模式,基存储器可以保存64位的地址范围,所以基本不受限制。
DS-Form只在64位指令中使用,它和D-Form类似,不同的是它使用地址的最后两位为扩展操作符,然而,它会在地址的值部分最右边加上两个0,其范围与D-Form指令相同(64K),但却将其限制位32位对其的内存。
使用D-Form和DS-Form指令格式对内存寻址
X-Form用于进行索引寄存器间接寻址模式,其中两个寄存器中的值会被加在一起来确定加载/存储的地址。它格式如下:
0-5位:操作码
6-10位:源/目标寄存器
11-15位:地址计算寄存器A
16-20位:地址计算寄存器B
21-30位:扩展操作符
31位:保留未用
X-Form的优点除了非常灵活外,还为我们提供了非常广泛的寻址范围,在D-Form中,只有一个值及寄存器来指定一个完整的范围。而在X-Form中,由于我们有两个寄存器,这两个组件都可以根据需要指定足够大的范围。因此,在使用基指针寻址模式或索引寻址模式而D-Form固定部分的16位范围太小的情况下,这些值可以存到寄存器中并使用X-Form。