按位运算,汇编

时间:2013-02-19 13:05:02

标签: assembly bit-manipulation avr atmega

我有一项任务是从

更改位位置
  

START bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 |位0

     

FINAL bit3'| bit2'| bit7 | bit6 | bit1 | bit0 | bit5'|位4'

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

我不知道如何移动它们而不是移动和滚动。我应该只使用一个或多个寄存器吗?

1 个答案:

答案 0 :(得分:3)

使用shift和rol,您应该可以使用两个寄存器,在进度中浪费原始文件。

向右移动最左边的位移入进位。 向右移动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 _ _'

(这是解决方案的一半)