AR9*_*R93 3 assembly powerpc instruction-set
我想知道如何操作lis和ori说明如何工作?有一个描述IBM 的描述,我不太明白。有人可以向我解释这个例子的结果是什么:
lis r1, 0x0028
ori r1, r1, 0x776F
Run Code Online (Sandbox Code Playgroud)
扩展助记符
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,在英语:寄存器内容的高16位设置r1到0×0028。(并将其他位归零,因为我们添加0x28 << 16到0.)
我认为ori的定义是直截了当的:
将通用寄存器内容的低 16 位与一个 16 位无符号整数进行逻辑或运算,并将结果存储在另一个通用寄存器中。
在您的示例中,ori r1, r1, 0x776F:
In English: 获取寄存器中任何内容的低 16 位r1并将它们与 0x776F ( 1110111 01101111)或,然后将其存储回r1.
所以这两条指令0x0028776F在 register 中形成r1,不依赖于之前的内容。
后的低 16 位为零addis,因此对它们进行 OR 运算只是将它们设置为ori's 立即数。
像这样的两个指令序列(特殊指令设置高位,则addi或ori以设置低比特)是用于构建任意的32位常数典型RISC的ISA的; 32 位指令字没有空间容纳整个 32 位立即数。
| 归档时间: |
|
| 查看次数: |
1675 次 |
| 最近记录: |