测试指令TEST
TEST OPRD1,OPRD2 ;按位与操作,但不保存结果,仅影响标志寄存器,根据影响的标志位得到结果
该指令通常用于检测某些位是否为1,但不改变原操作值.根据ZF得知判断结果
mov al,01100011B;检测位6是否为1,如果为1那么ZF=0,如果为0那么ZF=1
TEST AL,01000000B ;AL=01000000B 第六位为1 ,运算结果中有1存在所有ZF=0
;反之如果ZF=0,那么测试所得结果有1,即第六位为1
;ZF=1 ,结果全部为0,那么测试的位6不为1
MOV AL,01100011B ;在程序中我们是不知道AL的具体值的,我们想知道第七位是不是1
TEST AL,10000000B ;测试第7位是否为1 根据ZF得知测试结果
;TEST执行,不保存结果(TEST执行后AL=0H,结果全部为0)
;ZF=0 , 第七位不为1
(test”与”运算之后结果是否为0? 如果是那么ZF=1,不为0那么就否ZF=0 )
MOV AX,-1
TEST AX,AX;测试ax是否为0,ZF记录结果
JNE NEXT;jne根据ZF决定是否转移
TEST OPRD1,OPRD2 = (AND OPRD1,OPRD2)TEST不保留结果
MOV AX,10H;10H=00010000B
TEST AX,AX ;00010000B ‘AND’ 00010000B = 00010000B 结果是否为0?
|否
ZF=0
TEST AX,0 ;00010000B ‘AND’ 00000000B = 00000000B 结果是否为0?
|是
ZF=1
ZF(零标志位) 结果是否为0 ?
{是 ZF=1}
{否 ZF=0}
AND(与操作,用0改写相应位为0其它位不变)
测试AL 第三位是否为1
MOV AL,00001000B;
TEST AL,0001000B; al‘and’00001000B=00001000B ;把AL中其它位用0改变成0,第三位用1保留源数据
ZF=0 ;然后查看结果(第三位 ){=0 那么结果必然都为0} | ; {=1 那么结果不为0 说明第三位是1}
说明结果有1也就是说第三位是1
为什么ZF=0就能说明AL第三位是1呢
因为ZF=0说明结果有1出现,而与AL相与的第三位是”1” 那么就是说源数据AL的第三位也是1(查看AND指令)
最后
以上就是动听手套最近收集整理的关于测试指令TEST的全部内容,更多相关测试指令TEST内容请搜索靠谱客的其他文章。
发表评论 取消回复