我查了一下,没有什么能很好地解释它。它说 rlwimi 可以用来等效于它,但我也不知道该指令。
其中的代码:
andi. r0, r6, 3 # while(r6 != 3)
bdnzf eq, loc_90014730 # if(CTR != 0) loc_90014730();
insrwi r4, r4, 8,16 # ????
srwi. r0, r5, 4 # r0 = r5 >> 4;
insrwi r4, r4, 16,0
(r4==0)
我已经坚持这条指令有一段时间了。请不要只给我结果,请给我详细的解释。
最佳答案
我认为你需要用 rlwimi 做一些实验才能向自己充分解释它,但我发现以下是有帮助的。
《Power PC 编程手册》第 1 册中有关于 rlwimi 的编程说明,其中提供了有关 inslwi 和 insrwi 的更多详细信息:
rlwimi can be used to insert an n-bit field that is left-justified in the low-order 32 bits of register RS, into RAL starting at bit position b, by setting SH=32-b, MB=b, and ME=(b+n)-1. It can be used to insert an n-bit field that is right-justified in the low-order 32 bits of register RS, into RAL starting at bit position b, by setting SH=32-(b+n), MB=b, and ME=(b+n)-1.
它还有助于比较 insrwi 和 inslwi 的结果。下面是两个跟踪 rlwimi 过程的示例,其中 r4=0x12345678。
insrwi r4,r4,8,16 相当于 rlwimi r4,r4,8,16,23
- 左移 8 位,注意它将原始 r4 的最后 8 位放入与生成的掩码匹配的位置:0x34567812
- 生成掩码:0x0000FF00
- 在生成的掩码的控制下插入最后 8 位,即 r4 中右对齐的 8 位:0x12347878
因此 insrwi 从右侧取出 n 位(从第 32 位开始)并将它们插入到从 b 位开始的目标寄存器中。
inslwi r4,r4,8,16 相当于 rlwimi r4,r4,16,16,23
- 左移 16 位,注意它将原始 r4 的前 8 位放入与生成的掩码匹配的位置:0x56781234
- 生成掩码:0x0000FF00
- 在生成的掩码的控制下插入前 8 位,即 r4 中左对齐的 8 位:0x12341278
因此inslwi从左侧取出n位(从位0开始)并将它们插入到从位b开始的目标寄存器中。
关于powerpc - 无知关于insrwi指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543132/