应用
正如其名,可以比较大小,然后配合 条件转移指令 进行条件跳转
- 备忘知识点:[[标志位寄存器#ZF标志]]
格式
cmp op1 op2
功能
计算op1 - op2
应该是相当于减法指令,但是不保存结果
无符号数比较
比较关系 | (ax)?(bx) | (ax)-(bx)特点 | 标志寄存器 |
---|---|---|---|
等于 eq | (ax)=(bx) | (ax)-(bx)=0 | ZF=1 |
不等于 neq | (ax)!=(bx) | (ax)-(bx)!=0 | ZF=0 |
小于 | (ax)<(bx) | (ax)-(bx)产生借位 | CF=1 |
大于 | (ax)>(bx) | (ax)-(bx)不借位且结果非0 | CF=0 且 ZF=0 |
小于等于 | (ax)<=(bx) | 或者借位,或者结果为零 | CF=1 或 ZF=1 |
大于等于 | (ax)>=(bx) | (ax)-(bx)不必借位 | CF=0 |
有符号数比较
比较关系 | (ax)?(bx) | (ax)-(bx)特点 | 标志寄存器 |
---|---|---|---|
等于 eq | (ax)=(bx) | (ax)-(bx)=0 | ZF=1 |
不等于 neq | (ax)!=(bx) | (ax)-(bx)!=0 | ZF=0 |
小于 | (ax)<(bx) | (ax)-(bx)为负,且不溢出 | SF=1 && OF=0 |
大于 | (ax)>(bx) | (ax)-(bx)为负,溢出 | SF=1 && OF=1 |
小于等于 | (ax)>=(bx) | (ax)-(bx)非负,有溢出 | SF=0 && OF=1 |
大于等于 | (ax)<=(bx) | (ax)-(bx)非负,无溢出 | SF=0 && OF=0 |
设计思路
通过做减法运算影响标志寄存器,标志寄存器的相关位的取值,体现比较结果
理解
是==flag标志位==一个很重要的应用,作差与看进位与否实现了大小的逻辑判断,妙啊
ZF
判断是否为0CF
判断是否借位,即无符号做差是否为负SF
判断做差结果正负,可知大小,但是不够,==溢出==导致光靠ZF
并不靠谱
7位数据 34-(-96)=82H,因为数据溢出,本来应该是正数变成了负数
OF
与SF
配合判断是否溢出得出结论
- 本文作者: 汤圆
- 本文链接: https://littlesun.cloud/2023/06/15/cmp指令/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!