cmp的意思是两个操作数之间的比较。
cmp是比较(compare)的缩写,该术语通常用于描述两个操作数之间的比较。比较可以是字节级别、位级别或其他级别的,这取决于所比较的操作数的数据类型。cmp操作通常返回一个布尔值,指示两个操作数是否相等或者哪个操作数大于或小于另一个。
需要注意的是,cmp指令只是用来比较两个值,它并不会改变任何寄存器或内存中的值。相反,它只是根据比较结果设置标志位。程序员可以根据这些标志位执行其他操作,例如跳转、条件执行等等。
比较的结果有三种可能性:相等、大于、小于。在比较完成后,CPU会根据cmp是一条汇编指令,用于比较两个数据的大小关系,并设置相应的标志位,以供后续的分支指令使用。
cmp指令详解
例:cmp oprd1,oprd2。
为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF。
若执行指令后,ZF=1这个简单,则说明两个数相等,因为zero为1说明结果为0。
当无符号时:若CF=1,则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2。CF=0则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2。
当有符号时:若SF=0,OF=0则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2。若SF=1,OF=0则说明了此时的值为负数,没有溢出,则为oprd1<oprd2。若SF=0,OF=1则说明了此时的值为正数,有溢出,可以看出oprd1<oprd2。若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2。
最后两个可以作出这种判断的原因是,溢出的本质问题:两数同为正,相加,值为负,则说明溢出。两数同为负,相加,值为正,则说明溢出。故有,正正得负则溢出,负负得正则溢出。