如何设置位置?

时间:2014-09-15 17:13:34

标签: assembly x86 fasm

mov al, 100d ; 01100100
shr eax, 1 ; cf = 0
           ; 00110010

如何在第5位刻录cf?

例如: 我的号码10000111.CF = 1 => 10001111

我的主要任务是使用shr(shl)制作反向字节。我想自己做,但我不知道如何设置位置

2 个答案:

答案 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

测试它,让我们知道这是否有效