我想知道lis
和ori
说明如何运作?有一个我无法理解的描述IBM description。有人可以向我解释这个例子的结果是什么:
lis r1, 0x0028
ori r1, r1, 0x776F
答案 0 :(得分:2)
然后将扩展助记符
lis rx, value
=>相当于addis rx, 0, value
。又名立即加载
addis
定义为:
从级联偏移量和基地址计算地址,并将结果加载到通用寄存器中。
本页描述了“加载立即转移”操作(http://www.ibm.com/developerworks/library/l-ppc/):
方便地,lis(意思是“加载立即移位”)将直接加载到GPR的高16位。然后剩下要做的就是添加低位。
所以lis r1, 0x0028
为addis r1, 0, 0x0028
,英文:将寄存器r1
的内容的高16位设置为0x0028。 (并将其他位置为零,因为我们将0x28 << 16
添加到0
。)
我认为ori
的定义是直截了当的:
将通用寄存器内容的低16位逻辑或与16位无符号整数进行或运算,并将结果存储在另一个通用寄存器中。
在您的示例中,ori r1, r1, 0x776F
:
英文:获取寄存器r1
中的任何内容的低16位,并使用0x776F(1110111 01101111
)获取OR,然后将其存储回r1
。
因此,这两条指令在寄存器0x0028776F
中形成r1
,不依赖于先前的内容。
addis
后低16位为零,因此对它们进行OR运算只需将它们设置为ori
即时。
这样的2指令序列(设置高位的特殊指令,然后是addi
或ori
来设置低位)是用于构造任意32位常数的RISC ISA的典型代码;一个32位的指令字没有足够的空间用于整个32位立即。