测试指令TEST

测试指令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指令)

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值