使用逐位运算仅反转二进制数的MSB

时间:2013-05-23 05:46:19

标签: assembly x86 bitwise-operators masking

我试图找出一种最好的方法来反转二进制数的MSB并保持其他位不变,因为MSB已设置。

例如,如果二进制数是1111

我试过,只有斧头的前半部分啊,00b

and ah, 00b

我得到0011,因为你可以看到MSB旁边的位也会在我做那个时改变

如何在不更改其他位的情况下仅更改最高位?

提前谢谢

1 个答案:

答案 0 :(得分:4)

首先,你的AND并没有真正反转任何位;它清除它们。

如果要反转AX的最重要位,可以执行此操作:

XOR AX,8000h

或最重要的蚕食:

XOR AX,0F000h

或最重要的字节:

XOR AX,0FF00h

等等。

相关问题