清除汇编中寄存器中的位

时间:2010-07-16 05:21:05

标签: assembly x86

如何使用汇编编写一条清除AL寄存器中位0和1的指令?

6 个答案:

答案 0 :(得分:6)

AND AL,11111100b,假设为MASM格式

答案 1 :(得分:3)

AL是AX寄存器的低字节,因此您应该能够AND AL 0xFC屏蔽低位。

AND AL,0xfc

答案 2 :(得分:2)

您可以使用AND -operation清除位。

for each bit index `i`
  result[i] = boolean_and(first[i], second[i])

.--------- commonly associated symbol for the operation
|

&   1 0 <- first argument
-------
1 | 1 0 <- result
0 | 0 0

^--------- second argument

带字节的示例:

00101100
00111010
       &
00101000

因此,您可以使用此操作来屏蔽和翻转寄存器中的位区域。传递一个常量,因为第二个参数有点位,你想跟上它。

x86 mnemonic: AND a, b
operation: a = a & b

以下是如何做到这一点,除非你还没有理解它:

AND eax, 0xfffffffc

AL是EAX -register的最低字节部分,因此您可以这样做。

这是二进制 - &gt;十六进制转换表:

0000 | 0
0001 | 1
0010 | 2
0011 | 3
0100 | 4
0101 | 5
0110 | 6
0111 | 7
1000 | 8
1001 | 9
1010 | a
1011 | b
1100 | c
1101 | d
1110 | e
1111 | f

哦,如果你要成为一个自尊的大会知识程序员,你应该记住这个问题。

还阅读有关OR和XOR位操作的信息。

答案 3 :(得分:0)

使用xor
还有另一种方法可以做到这一点 示例:

mov al, ff

xor al, 00000011b    

al = fc because we cleared bit 0 and 1

答案 4 :(得分:-2)

and al, 0xFD

使其适应您正在使用的汇编程序:gas,nasm,masm ......

编辑:实际上它是and al, 0xFC,但你明白了

答案 5 :(得分:-2)

将其等于零?

mov al,00000000

AX = 16位 AL = 8位

现在,如果有任何问题,那么答案将与ored

相同

如果有任何答案,答案将为“0”

所以我想用全1或全0清除它取决于你的工作以及你想如何识别寄存器中没有任何内容。