将值移到二进制数的某个点

时间:2015-02-21 19:18:25

标签: assembly microcontroller avr

我想知道是否有可能做到以下几点 例如,我有一个号码00001110.我正在向左移动它。 - > 00011100 ....
但问题是,是否可以从进位标志开始设置值不是从第七位开始,而是从第六位开始。有一个命令--ROL它将第七位移入C标志,然后将该值存储在零位中 但是我需要这样做,但是不要对第七位做任何事情,并将第六位存储在C标志中,并且还将它存储在零位中。我的意思是当值为01110000时,下一个值应为01100001 是否可以这样做。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

Instruction  Carry  Reg value
-----------  -----  ---------
PUSH           x    01110000
ROL            0    1110000x
ROL            1    110000x0    b6 now in carry
POP            1    01110000
ROL            0    11100001    b6 now to b0
AND $7Fh       x    01100001

上面的答案并没有保留b7它清除它。这保留了b7。

MOV     r1,r0       ;copy r0
ROL     r0
ROL     r0          ;b6 in Carry
MOV     r0,r1       ;restore r0
ROL     r0          ;shift in original b6 to b0
ROL     r0          ;replace b7 in r0 with b7 in r1
ROL     r1
ROR     r0