指令系统
汇编知识
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
秋叶依剑