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

joa*_*aoA 0 x86 assembly bitwise-operators x86-16

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

TEST AL, 16      ; tests the 5th bit's state
Run Code Online (Sandbox Code Playgroud)

考虑到TEST指令的作用,这一点是否正确?它根据标记设置标记AL & 16.那怎么测试第5位?

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

Aur*_*ílý 6

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

TEST是按位AND.按位AND运算的结果是两个原始值都1存在的1值.例如:

a       = 1010 1110
b       = 0110 1011
a AND b = 0010 1010
Run Code Online (Sandbox Code Playgroud)

假设aALb16:

AL        = xxxx xxxx
16        = 0001 0000
AL AND 16 = 000y 0000
Run Code Online (Sandbox Code Playgroud)

结果可以是0,如果AL的第五位是0,或者它可以是16,如果第五位AL1.如果使用指令结果的TEST指令是,例如,条件跳转,如JNZ,那么它实际上是"测试"是否设置了第五位AL并根据结果进行操作.

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

  • 只是指出`TEST'是非破坏性的而不是'AND` (4认同)