我想知道如何在本身不提供此操作的精简指令集计算机上执行右移。
左移可以简单地通过向自身添加一个寄存器来完成,但是右移呢?
RISC
优惠仅限:
ADD
NOT
NXOR (XOR)
AND (NAND)
soOR
和NOR
都可以通过几个(N)AND
andNOT
操作来模拟。
我想知道如何在本身不提供此操作的精简指令集计算机上执行右移。
左移可以简单地通过向自身添加一个寄存器来完成,但是右移呢?
RISC
优惠仅限:
ADD
NOT
NXOR (XOR)
AND (NAND)
soOR
和NOR
都可以通过几个(N)AND
andNOT
操作来模拟。
下面的 C 程序仅使用授权指令和条件跳转,并且它input
移入output
1。
如果您要模拟的指令是“shift by 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;
}