mov al, 100d ; 01100100
shr eax, 1 ; cf = 0
; 00110010
如何在第5位刻录cf?
例如: 我的号码10000111.CF = 1 => 10001111
我的主要任务是使用shr(shl)制作反向字节。我想自己做,但我不知道如何设置位置
答案 0 :(得分:1)
为了反转这些位,只需将它们从同一端移入目标操作数,然后将它们从源移出(即使用相反的移位)。示例代码:
mov al, 100 ; input = 01100100
mov ah, 0 ; output
mov ecx, 8 ; 8 bits to process
next:
shr al, 1 ; shift next bit out to the right
rcl ah, 1 ; shift it in from the right
loop next
; result in ah = 38 = 0010 1100
然而,要回答你的问题:将进位转移到一个归零的临时寄存器到给定位置,然后使用按位OR
将其设置在目的地。示例代码:
mov dl, 0 ; zero temp register, without affecting CF
rcl dl, 5 ; move CF into bit #5 (use CL register for dynamic)
or al, dl ; merge into al
答案 1 :(得分:1)
“...... 但我不知道如何设置位置 ......”
可以理解的。有很多指示。
您选择使用的第一个SHR
(和SHL
,忽略了此讨论),将调整进位标志以包含(源寄存器)边缘的位你搬出去了。
还有另一条指令,RCL
(和RCR
,在本讨论中同样被忽略),它将进位位置于目标寄存器的另一边(你将“转移“可以这么说”
连续八次这样做,你就可以完成“反向过程”了。
这里有两页描述这两条指令,包括一张小图片......
Penguin Explains SHR instruction
Penguin Explains RCL instruction
嘿,这很简单,所以,免费代码,只因为我今天感觉很好......
Mov AL,Some_Number ;Define this somewhere
Sub AH,AH ;Not really needed, placed here to help newcomers understand
SHR AL,1 ;Get the bottom bit (bit #0) from AL
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #1
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #2
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #3
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #4
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #5
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #6
RCL AH,1 ;Put it into the top bit of AH
SHR AL,1 ;Now get bit #7
RCL AH,1 ;Put it into the top bit of AH
Mov Reverse_Pattern,AH ;The pattern is now exactly backwards
测试它,让我们知道这是否有效