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
假设 a
是 AL
并且 b
是 16
:
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=].
在我学院关于 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
假设 a
是 AL
并且 b
是 16
:
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=].