0

我的任务是更改位位置

开始位7 | 位6 | 位5 | 位4 | 位3 | 位2 | 位1 | 位0

最终位3' | 位2' | 位7 | 位6 | 位1 | 位0 | 位5' | 位4'

使用按位和移位/滚动指令。

我不知道如何以不同于移动和滚动的方式移动它们。我应该只使用一个还是多个寄存器来做到这一点?

4

1 回答 1

3

使用 shift 和 rol,你应该可以用两个寄存器来做,在进程中浪费了原来的。

通过进位右移 A将最左边的位复制到进位中。通过进位右移 B将该位复制到寄存器 B 并将 LSB 移到进位。

按顺序

1 - ROR A,A,1     // A = _7654321, --> carry = '0'
2 - ROR B,B,1     // B = 0_______, --> carry = 'x' / don't care
3 - ROR A,A,1     // A = x_765432, --> carry = '1'
4 - ROR B,B,1     // B = 10______, --> carry = 'x' / don't care
// this has copied two bits from A to B while shifting both

5 - ROR B,B,1     // B = x10_____,
6 - ROR B,B,1     // B = xx10____,

repeat steps 1-4 again for B to contain bits '3 2 _ _ 1 0 _ _'

(这是解决方案的一半)

于 2013-02-19T14:46:10.093 回答