有没有人可以用c++给我举个例子,演示一下我练习汇编语言的技能,语言是powerpc。从我得到的信息来看,我们把44位移到了r0的右边,从那里我们提取了前8位。
extrdi r0, r0, 8,44
发布于 2021-02-01 14:02:24
ISA说extrdi是“提取和右对齐立即”,它是rldicl的扩展助记符(“向左旋转双字立即和清除左”)-2.07pg717。因此,您的语句等同于rldicl r0, r0, 52, 56。
因此,您希望从位置44开始提取8位,然后将其右对齐,这将使其成为最低有效的8位。值得注意的是,IBM位数字与您可能预期的相反:conventional bit = 63 - IBM bit。所以IBM的44到51位是‘传统的’位号12到19。
我们简单地向下移位,这样位12就变成了位0,位19变成了位7-移位了12位。然后,我们需要对其进行掩码,以便只获得最低有效的8位。
unsigned long extrdi(unsigned long a) {
return (a >> 12) & 0xff;
}在godbolt.org:https://godbolt.org/z/rGe3EW上,我们看到这确实是:
extrdi:
rldicl 3,3,52,56
blr
.long 0
.byte 0,0,0,0,0,0,0,0(r3是参数和返回寄存器)
https://stackoverflow.com/questions/65986376
复制相似问题