Skip to content

指令系统

汇编知识

CMP 指令

指令格式:CMP DST, SRC

指令功能:(DST)-(SRC)

说明:CMP 指令称为比较指令,CMP指令执行一次减法运算,影响全部的状态标志,但不保存运算结果。他在使用上的要求与SUB指令完全相同

CMP指令用于比较数据的大小,但其本身并不能完成这样的比较,他只是通过设置各种条件标志来为实际的比较提供条件。

如对于两个无符号数DST 和 SRC, 若执行CMP指令后 CF=1, 则可断定DST 小于SRC; 若执行CMP指令后ZF=1, 则可断定DST 等于SRC

对于无符号数只需要看CF和ZF,对于有符号数只需要看SF和OF。有符号看溢出,无符号看进位。

当有符号时:

若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2

若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1<oprd2

若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出oprd1<oprd2

若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2

最后两个可以作出这种判断的原因是,溢出的本质问题:

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

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

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

当无符号数时:

CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2

CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2

Released under the MIT License.