您的位置:首页 > 其它

指令详解

2011-03-25 23:57 375 查看
1、test指令

测试指令

  格式:TEST DEST,SRC

  功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数。

  例1:

  TEST DWORD PTR [BX],80000000H

  TEST AL,CL

  TEST指令常用于测试操作数中某位是否为1,而且不会影响目的操作数。如果测试某位的状态,对某位进行逻辑与1的运算,其它位逻辑与0,然后判断标志位。运算结果为0,ZF=1,表示被测试位为0;否则ZF=0,表示被测试位为1。

  例2:   TEST AL,80H;测试AL中最高位

        JNZ NEXT;如果最高位为1,转到标志NEXT处。

  TEST指令影响标志位为SF,ZF,PF,并且使OF=CF=0。

2、cmp指令

比较指令

   格式:CMP DEST,SRC

  功能:目的操作数减源操作数,结果不回送。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。

  CMP指令影响标志位为OF,SF,ZF,AF,PF,CF。

  例 3.29

  CMP CX,3

  CMP WORD PTR [SI],3

  CMP AX,BLOCK

  执行比较指令后,对状态标志位影响见表3.2。对于两个数的比较(AX-BX)有以下3种情况。

表CMP指令对标志位的影响



  · 两个正数比较,使用SF标志位判断。

    SF=0,则AX≥BX,若ZF=1,则AX=BX

    SF=1,则AX<BX

  · 两个无符号数比较,使用CF标志位判断。

    CF=0,则AX≥BX,若ZF=1,则AX=BX

    CF=1,则AX<BX

  · 两个负数比较,使用SF标志位判断。

    SF=0,则AX≥BX,若ZF=1,则AX=BX

    SF=1,则AX<BX

  · 两个异符号数比较。

    如果OF=0,仍可用SF标志判断大小。

    如果OF=1,说明结果的符号位发生错误,所以

         SF=0,则AX<BX

         SF=1,则AX>BX

  综上所述:两个异号数比较

  当OF=0,SF=0,则AX>BX

      SF=1,则AX<BX

  当OF=1,SF=0,则AX<BX

      SF=1,则AX>BX

  用逻辑表达式表示为:

  若OF∨-SF=0,则AX>BX

  若OF∨-SF=1,则AX<BX
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: