将值移动到二进制数中的某个点
Shift value to some point in binary number
不知是否可以做到以下几点
例如,我有一个数字 00001110。我将它向左移动。 -> 00011100....
但问题是是否可以从第六位而不是第七位开始设置进位标志的值。有一个命令 - ROL 它将第七位移入 C 标志,然后将此值存储在零位中。
但我需要这样做,但不要对第七位做任何事情,并将第六位存储在 C 标志中,然后将其存储在零位中。我的意思是,当值为 01110000 时,下一个值应为 01100001。
是否可以这样做。如果有任何帮助,我将不胜感激。
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 Fh 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
不知是否可以做到以下几点
例如,我有一个数字 00001110。我将它向左移动。 -> 00011100....
但问题是是否可以从第六位而不是第七位开始设置进位标志的值。有一个命令 - ROL 它将第七位移入 C 标志,然后将此值存储在零位中。
但我需要这样做,但不要对第七位做任何事情,并将第六位存储在 C 标志中,然后将其存储在零位中。我的意思是,当值为 01110000 时,下一个值应为 01100001。
是否可以这样做。如果有任何帮助,我将不胜感激。
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 Fh 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