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

How does a bitwise AND (or TEST) with 16 test the 5th bit?

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

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

考虑到 the TEST instruction does,这完全正确吗?它根据 AL & 16 设置标志。那如何测试第 5 位?

注意:之前没有提到 AL 的值,只是这里显示的值,所以我认为这必须在一般情况下起作用。

十进制的

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

TEST 是按位与。按位 AND 运算的结果是一个具有 1 的值,只要两个原始值中都有 1。例如:

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

假设 aAL 并且 b16:

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

结果可以是0,如果AL的第五位是0,也可以是16,如果AL的第五位是1。例如,如果使用 TEST 指令结果的指令是一个条件跳转,如 JNZ,那么如果 AL 的第五位被设置并执行,它实际上会 'test'根据结果​​。

更准确地说,结果是间接使用的——只是设置了各种标志。在这种情况下,ZF 标志是相关的。根据按位与运算的结果,如果结果为 0,则 ZF 设置为 0;如果结果不是 [=],则设置为 1 21=].