16位的按位AND(或TEST)如何测试第5位?

时间:2016-09-09 21:20:44

标签: assembly x86 bitwise-operators x86-16

在我的学院关于8086 Assembly的文档中有以下示例:

TEST AL, 16      ; tests the 5th bit's state

考虑到the TEST instruction does,这一点是否正确?它根据AL & 16设置标志。那怎么测试第5位?

注意:之前没有提到过AL的值,正是这里显示的内容,所以我认为这必须适用于一般情况。

1 个答案:

答案 0 :(得分:6)

十进制中的

16是二进制的10000。请注意,右边的第五位已设置,并且它是唯一的一位。

TEST是按位AND。按位AND运算的结果是两个原始值中只有1的值1的值。例如:

a       = 1010 1110
b       = 0110 1011
a AND b = 0010 1010

假设aALb16

AL        = xxxx xxxx
16        = 0001 0000
AL AND 16 = 000y 0000

结果可以是0,如果AL的第五位是0,或者它可以是16,如果AL的第五位是{{} 1}}。如果使用1指令的结果的指令是,例如,像JNZ那样的条件跳转,那么它实际上是'测试',如果TEST的第五位被设置并且根据结果。

更准确地说,结果是间接使用的 - 只设置了各种标志。在这种情况下,AL标志是相关的。根据按位AND操作的结果,ZF如果结果为ZF则设置为0,如果结果不是0则设置为1 0 1}}。