宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

我刚看到cmp命令,一开始有点头晕。 后来在网上找了资料,才明白。 为了方便初学者,简单地写下我的想法吧。 谢谢你绕过mmydmn!

比较(CMP )命令比较两个操作数的大小

例:cmp oprd1,oprd2

从最初操作中减去第二个操作数,

但是,它不影响第二个操作数的值

它影响标志的CF、ZF、OF、AF、PF

怎么判断大小?

执行命令后

ZF=1这一简单说明两个数相等。 zero为1,因此结果为0

无符号时:

如果

CF=1表示进位或借位,由于cmp进行负操作,所以可知是借位,此时oprd1oprd2

CF=0表示没有数位,但此时注意ZF是否为0,为0时结果不是0,因此此时oprd1oprd2

如果有符号:

如果SF=0,OF=0,则表示此时的值为正,没有溢出,可以直观地看出oprd1oprd2

如果SF=1,OF=0,则表示此时的值为负数,如果没有溢出,则为oprd1oprd2

SF=0,OF=1的情况下,那个时候的值为正,表示存在溢出,知道oprd1oprd2

如果SF=1,OF=1,则此时的值表示以负数存在溢出,可以看到oprd1oprd2

最后两个可

以作出这种判断的原因是,溢出的本质问题:

两数同为正,相加,值为负,则说明溢出

两数同为负,相加,值为正,则说明溢出

故有,正正得负则溢出,负负得正则溢出

很简单的一条指令,初学者看看,我感觉我写的还挺详细的,哈哈……

 

 

补充: 两数相减,同号,则不溢出

            两数为异号,结果与减数符号相同,则溢出。

——————————————————————————————————————————————————-

比效指令 CMP(CoMPare)

格式: CMP OPRD1,OPRD2

功能: 对两数进行相减,进行比较.

 

说明:

       1. OPRD1为任意通用寄存器或存储器操作数.
 —-     OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.

       2. 对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而            只是比较.因而不改变OPRD1和OPRD2的内容,该指令用于改变标志位.

       3. 在8088/8086指令系统中,专门提供了一组根据带符号数比较大小后,实现条件转移的指令.

       4. 示例: CMP AL,20
                CMP DX,CX
                CMP AX,DATA1[BX]
                CMP BATE[DI],BX

       5. 以CMP DX,CX为例,对标志位的影响如下:
          (1) (DX)=(CX)时,则ZF=1;

          (2) 两相无符号数比较:
              若(DX)>=(CX)时,则CF=0,即无借位.
              若(DX)<(CX)时,则CF=1.

          (3) 两个带符号数比较
              对带符号数判断大小可通过溢出标志OF及符号标志SF共同判断.
              当 OF=0,即无溢出时,若SF=0,则(DX)>(CX)
                                 若SF=1,则(DX)<(CX)
              当 OF=1,即有溢出时,若SF=1,则(DX)>(CX) 
                                 若SF=0,则(DX)<(CX)