cmp是比较指令,cmp的功能相当于减法指令。它不保存结果,只是影响相应的标志位。其他的指令通过识别这些被影响的标志位来得知比较结果。
- 执行完成后,如果
- ZF=1说明两个数相等
- CF=1说明有进位或借位,所以前数小于后数;
- CF=0说明没有借位,此时如果ZF=0则相等否则大于.
SF=0,OF=0说明此时的值为正数,没有溢出,大于;SF=1,OF=0说明此时的值为负数,没有溢出,小于;SF=0,OF=1说明此时的值为正数,有溢出,小于;SF=1,OF=1说明此时的值为负数,有溢出,大于;
通过OF和SF判断cmp的两个参数的大小:
两数相减的结果的范围在[-255,255],
SF=1时,
结果是从10000000到11111111,说明可能范围是[-128,-1]或[128,255],
[128,255]不属于[-128,127]即出现溢出,所以
- OF=0时范围在[-128,-1],小于;
- OF=1时范围在[128,255],大于。
SF=0时,
结果是从00000000到01111111,说明可能范围是[0,127]或[-256,-129],
[-256,-129]不属于[-128,127]即出现溢出,所以
- OF=0时范围在[0,127],大于或者等于(0时等于否则大于);
- OF=1时范围在[-256,-129],小于。