在我的学院关于8086 Assembly的文档中有以下示例:
TEST AL, 16 ; tests the 5th bit's state
考虑到the TEST instruction does,这一点是否正确?它根据AL & 16
设置标志。那怎么测试第5位?
注意:之前没有提到过AL的值,正是这里显示的内容,所以我认为这必须适用于一般情况。
答案 0 :(得分:6)
16
是二进制的10000
。请注意,右边的第五位已设置,并且它是唯一的一位。
TEST
是按位AND。按位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}}。如果使用1
指令的结果的指令是,例如,像JNZ那样的条件跳转,那么它实际上是'测试',如果TEST
的第五位被设置并且根据结果。
更准确地说,结果是间接使用的 - 只设置了各种标志。在这种情况下,AL
标志是相关的。根据按位AND操作的结果,ZF
如果结果为ZF
则设置为0
,如果结果不是0
则设置为1
0
1}}。