我的任务是更改位位置
开始位7 | 位6 | 位5 | 位4 | 位3 | 位2 | 位1 | 位0
最终位3' | 位2' | 位7 | 位6 | 位1 | 位0 | 位5' | 位4'
使用按位和移位/滚动指令。
我不知道如何以不同于移动和滚动的方式移动它们。我应该只使用一个还是多个寄存器来做到这一点?
我的任务是更改位位置
开始位7 | 位6 | 位5 | 位4 | 位3 | 位2 | 位1 | 位0
最终位3' | 位2' | 位7 | 位6 | 位1 | 位0 | 位5' | 位4'
使用按位和移位/滚动指令。
我不知道如何以不同于移动和滚动的方式移动它们。我应该只使用一个还是多个寄存器来做到这一点?
使用 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 _ _'
(这是解决方案的一半)