我想知道如何在不能自行提供此操作的精简指令集计算机上执行右移。
左移可以简单地通过向自身添加寄存器来完成,但右移如何?
RISC
仅提供:
ADD
NOT
NXOR (XOR)
AND (NAND)
所以OR
和NOR
都可以通过多个(N)AND
和NOT
操作进行模拟。
答案 0 :(得分:2)
下面的C程序仅使用授权指令和条件跳转,并将input
转换为output
1。
如果您尝试模拟的指令是“移位n”,那么您应该从c
开始等于2 n 。
unsigned int shift_right(unsigned int input) {
unsigned int d = 1;
unsigned int output = 0;
for (unsigned int c = 2; c <= 0x80000000; c += c)
{
if (c & input)
output |= d;
d += d;
}
return output;
}