cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

cmp指令格式: cmp 操作对象1,操作对象2

功能:计算操作对象1-操作对象2但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。

例如指令cmp ax,ax,做(ax)-(ax)的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位。指令执行后:zf=1.pf=1,sf=0,cf=0,of=0。

下面的指令:

mov ax,
mov bx,
cmp ax,bx

执行后: (ax)=8, zf=0,pf=1,sf=0,cf=0,of=0。

其实,我们通过cmp指令执行后,相关标志位的值就可以看出比较的结果。

cmp ax,bx

如果(ax)=(bx),则(ax)-(bx)=0,所以:zf=1;

如果(ax)≠(bx),则(ax)-(bx)≠0,所以:zf=0;

如果(ax)<(bx),则(ax)-(bx)将产生借位,,所以:cf=1;

如果(ax)≥(bx),则(ax)-(bx)不必借位,所以:cf=0;

如果(ax)>(bx),则(ax)-(bx)既不必借位,结果又不为0,所以:cf=0并且zf=0;

如果(ax)≤(bx),则(ax)-(bx)既可能借位,结果可能为0,所以:cf=1或zf=1;

指令cmp ax,bx的逻辑含义是比较ax和bx中的值,如果执行后:

zf=1,说明(ax)=(bx)

zf=0,说明(ax)≠(bx)

cf=1,说明(ax)<(bx)

cf=0,说明(ax)≥(bx)

cf=0并且zf=0,说明(ax)>(bx)

cf=1或zf=0,说明(ax)≤(bx)

上面所讲的是用cmp进行有符号数比较时,相关标志位对比较结果的记录。如果用cmp来进行有符号数比较时,CPU用哪些标志位对比较结果进行记录。例如

cmp ah,bh

如果(ah)=(bh),则(ah)-(bh)=0, 所以:zf=1

如果(ah)≠(bh),则(ah)-(bh)≠0, 所以:zf=0;

所以,根据cmp指令执行后zf的值,就可以知道两个数据是否相等。

最后以cmp ah,bh为例,总结一下CPU执行cmp指令后,sf和of的值是如何来说明比较的结果的.

1)如果sf=1,而of=0

of=0, 说明没有溢出,逻辑上真正结果的正负=实际结果的正负;

因sf=1, 实际结果为负,所以逻辑上真正的结果为负,所以(ah)<(bh)。

2)如果sf=1,而of=1

of=1, 说明有溢出,逻辑上真正结果的正负≠实际结果的正负;

因sf=1, 实际结果为负。

实际结果为负,而又有溢出,这说明了是由于溢出导致了实际结果为负,简单分析一下,就可以看出,如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正。

这样,sf=1,of=1,说明了(ah)>(bh)。

3)如果sf=0, 而of=1

of=1, 说明有溢出,逻辑上真正结果的正负≠实际结果的正负;

因sf=0,实际结果非负。而of=1说明有溢出,则结果非0,所以实际结果为正。

实际结果为正,而又有溢出,这说明是由于溢出导致了实际结果非负,简单分析一下,就可以看出,如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负。

这样:sf=0, of=1,说明了(ah)<(bh)。

4)如果sf=0,而of=0

of=0, 说明没有溢出,逻辑上真正结果的正负=实际结果的正负;

因sf=0,实际结果非负,所以逻辑上真正的结果非负,所以(ah)≥(bh)。

cmp指令的更多相关文章

  1. CMP指令(转)

    刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...

  2. 《汇编语言(第三版)》cmp指令

    # cmp指令 本质 cmp是比较指令,cmp的功能相当于减法. 格式 cmp 操作对象1,操作对象2 功能 计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果. 正向判 ...

  3. cmp 指令

    (lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...

  4. cmp比较指令对标志寄存器的影响

    比如: mov ax,x mov bx,y cmp ax,bx cmp ax,bx的逻辑含义是比较ax,bx中的值.如果执行后: ZF=1则AX=BX ZF=0则AX!=BX CF=1则AX<B ...

  5. 汇编cmp比较指令详解

    刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...

  6. 关于ARM中的tst、cmp、bne、beq指令

    一.关于cmp的详细用法 假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H. 执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算. 列出二进 ...

  7. 汇编指令之CMP, TEST指令

    一.CMP指令 这一块呢,我不想上图了,汇编的博文我已经快要让我写吐了,其实也有好多我没有补充进来,比如进制,LEA指令,数据宽度,有符号,无符号的区分等等,但我真的要吐了,这些玩意我已经不是第一次写 ...

  8. 学习:CMP/TEST比较指令

    cmp指令:比较 cmp指令,和sub指令的最大的不同点就是影响标志位 不储存结果 1.当前汇编指令为cmp ecx,edx 2.当前ecx寄存器中的地址为00000000,edx寄存器中的地址000 ...

  9. arm汇编指令

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...

随机推荐

  1. Nginx做web服务器反向代理

    实验目的 通过nginx实现反向代理的功能,类似apache反向代理和haproxy反向代理 工作中用nginx做反向代理和负载均衡的也越来越多了 有些公司从web服务器到反向代理,都使用nginx. ...

  2. 我发起了一个 操作系统 GUI 和 Tcp / IP 包 的 开源项目 DeviceOS

    操作系统 如果 不需要 处理 复杂多样 的 硬件 兼容性, 其实 并不算 大项目, 可以算 毕业设计 . 但是, GUI 和 Tcp / IP  这两个 部分 的 实现逻辑 很多 很复杂,  这  2 ...

  3. python实现Content-Type类型为application/x-www-form-urlencoded发送POST请求

    周日晚上接到公司的电话需要通过新榜的接口拿下微博热搜数据,拿到接口文档看了下很简单的一个post请求,主要根据时间段来获取热搜数据. 在实际编码的过程中经常遇到header的Content-Type的 ...

  4. win10 hyper-v 外网设置

    1. hyper-v管理器中添加 [虚拟交换机] 2. 为虚拟机添加网络适配器 在[虚拟交换机]中选择新创建的交换机 3.  在本本的[网络连接]中,按下 CTRL 键,然后选择[WLAN]和[vEt ...

  5. Java_集合面试题

    Java_集合面试题 0.链表,队列和栈的区别? 链表是一种存储结构,指得是存储时候除了要存储数据元素之外,还要用数据元素一起的另外空间存储数据元素的关系. 队列和栈都是线性表,属于逻辑结构范畴,都是 ...

  6. DNS基础

    什么是DNS? DNS--Domain name system,域名系统,简单来说就是域名和IP地址间的映射关系.当你在浏览器的地址栏输入网址(或域名,如 www,baidu.com)的时候,在网络中 ...

  7. linux nodejs

    scp node-v8.15.0-linux-x64.tar.gz root@10.88.248.231:/lngoa tar -zxvf node-v8.15.0-linux-x64.tar.gz ...

  8. Linux之目录结构配置

    因为 Linux 的开发者实在太多了,如果每个人都发展出属于自己的目录配置方法, 那么将可能会造成很多管理上的困扰.所以,就有一个叫做Filesystem Hierarchy Standard (FH ...

  9. verilog 代码分析与仿真

    verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...

  10. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...