《汇编语言(第三版)》cmp指令
cmp指令
本质
cmp是比较指令,cmp的功能相当于减法。
格式
cmp 操作对象1,操作对象2
功能
计算操作对象1-操作对象2,但并不保存结果,可以根据flag标志寄存器来判断结果。
正向判断
如果(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,也不产生借位,所以:zf=cf=0。
如果(ax) <=(bx) 则(ax)-(bx)可能为0,也可能产生借位,所以:zf=1或zf=1。(1、3起码满足一个)
反向判断
指令cmp ax,bx 的逻辑含义是比较ax和bx的值,如果执行后:
1. zf=1 ===> (ax)=(bx)
2. zf=0 ===> (ax)!=(bx)
3. cf=1 ===> (ax)<(bx)
4. cf=0 ===> (ax)>=(bx)
5. cf=zf=0 ===> (ax)>(bx)
6. cf=1或zf=1 ===> (ax)<=(bx)
如何记忆?
1. zf是0标志寄存器,zf=1时,ax=bx;zf=0时,ax != bx。
2. cf是进位借位标志寄存器,cf=1时,ax<bx;cf=0时,ax>=bx。
3. 根据1、2组合可以推出另外两个。
CMP指令如何起作用?
cmp指令的比较结果需要通过条件转移指令来检测。
| 指令 | 解释 | 含义 | 检测的相关标志位 |
|---|---|---|---|
| je | e:equal | 等于则转移 | zf=1 |
| jne | ne:not equal | 不等于则转移 | zf=0 |
| jb | b:below | 低于则转移 | cf=1 |
| jnb | nb:not below | 不低于则转移 | cf=0 |
| ja | a:above | 高于则转移 | cf=0且zf=0 |
| jna | na:not above | 不高于则转移 | cf=1或zf=1 |
《汇编语言(第三版)》cmp指令的更多相关文章
- CMP指令(转)
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...
- cmp指令
cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果.cmp指令执行后,将对标志寄存器产生影响.其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果. cmp指令格式: cmp 操作对象 ...
- cmp 指令
(lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...
- 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 ...
- 汇编cmp比较指令详解
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...
- 关于ARM中的tst、cmp、bne、beq指令
一.关于cmp的详细用法 假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H. 执行的指令是:CMP AX, BX 执行这条指令时,先做用AX中的数减去BX中的数的减法运算. 列出二进 ...
- 汇编指令之CMP, TEST指令
一.CMP指令 这一块呢,我不想上图了,汇编的博文我已经快要让我写吐了,其实也有好多我没有补充进来,比如进制,LEA指令,数据宽度,有符号,无符号的区分等等,但我真的要吐了,这些玩意我已经不是第一次写 ...
- 学习:CMP/TEST比较指令
cmp指令:比较 cmp指令,和sub指令的最大的不同点就是影响标志位 不储存结果 1.当前汇编指令为cmp ecx,edx 2.当前ecx寄存器中的地址为00000000,edx寄存器中的地址000 ...
- arm汇编指令
ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...
随机推荐
- Git不需重复输入账号和密码的方法
1. 打开 TortoiseGit 附带工具 Puttygen(PuTTY Key Generator) C:\Program Files\TortoiseGit\bin\puttygen.exe. ...
- nginx 与 Windows 错误
设置根目录 root "D:/www/app"; proxy_pass 反向代理 404 location php 模块添加 fastcgi_split_path_info ^(( ...
- mysql安装出现 conflicts with mysql*的解决办法
rpm -ivh Percona-Server-client-56-5.6.16-rel64.0.el6.x86_64.rpm --nodeps --force error: Failed depen ...
- deploy sql clr
1, create strong signed key file 2, create asymmetric key
- CSS大纲
- offscreen-render
offscreen-render 什么是offscreen-render?offscreen-render涉及的内容比较多,有offscreen-render那就有onscreen render,on ...
- RocketMQ学习笔记(12)----RocketMQ的Consumer API简介
由于消息的消费方式有两种,所以两种方式也有不同的API: 1. PushConsumer的配置 1. consumerGroup: 默认值为DEFAULT_CONSUMER,Consumer组名,多个 ...
- 苹果操作系统名称演变史 新名称macOS
历史回顾 发布年代 名称 序号 1994-1999 Classic Mac OS 1-9 2001-2011 Mac OS X 10.0-Lion 2012-2015 OS X Mountain Li ...
- Unity3d 拖拽脚本报错 Can’t add script
报错截图: 报错原因: c#文件创建以后再改名,会报错找不到对应类. 类名和文件名要一致才行.(这个是Unity要求,c#本身不要求一致)
- HDU 1002 A + B Problem II( 高精度加法水 )
链接:传送门 题意:A + B 高精度,板子题 /************************************************************************* & ...