如何使用汇编编写一条清除AL寄存器中位0和1的指令?
答案 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清除它取决于你的工作以及你想如何识别寄存器中没有任何内容。