`
wangpa501
  • 浏览: 14112 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

汇编基础--cmp汇编指令

 
阅读更多
转自http://blog.csdn.net/wfq_1985/article/details/6166002

cmp是比较指令,cmp的功能相当于减法指令。它不保存结果,只是影响相应的标志位。其他的指令通过识别这些被影响的标志位来得知比较结果。

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

     计算 操作对象1 - 操作对象2 但不保存结果,只是根据结果修改相应的标志位。

     举例假如此时eax = 0h
     那么cmp eax, eax     (eax - eax = 0)
   
     此时我们的指令执行后, ZF标志位 = 1, PF = 0, SF =0 , CF =0 , OF = 0 。

     (因为我们结果为0,所以ZF标志位为1 . 前提是在PF操作数为0的情况下执行
ps:其实PF标志位无关紧要)


     在继续举例
   
     mov ebx, 05h
     mov eax, 08h
     cmp eax, ebx   (eax - ebx = 03h)
     此时我们的指令执行后(ZF = 0, PF = 1, SF = 0, CF = 0, OF = 0)
   
     因为此时我们就可以通过标志位判断出eax 是否大于ebx。 我们有时候想问题,可以逆序的想。
可以这样想,如果它小于的话会发生什么。。 举例假如al = 05h, bl = 08h (为了更直观,所以我采用低8位寄存器)
     
     mov al, 05h
     mov bl, 08h
     cmp al, bl   (al - bl = -3h)
     (注意:al是低8位寄存器,为了更直观,所以我采用低8位寄存器,计算机负数是以补码的形式在内存存放的,赶快拿起你的手,算算-3的补码是多少。)
     那么执行后 (ZF = 0, PF = 0, CF = 1, SF = 1, OF =0)
   
     (那么大家肯定会问:CF = 1, 为何存在了进位操作。   在我们计算机中两个数据做减法运算的时候,有可能象更高位借位,举例
                   mov al, 56h
                   mov bl, 57h
                   sub al, bl 
           借位后,将产生156 - 57h )
   SF我就不说了吧,符号标志位,我们的结果为负,所以SF = 1
 
 
     从以上两点标志位我们是否就可以分析出呢。   如果小于则SF = 1 , CF =1 。。 呵呵

     那么刚刚上面的我们就可以轻松的解决了。。 如果我们的数值大于的话,则 SF, CF ,ZF肯定是0。 所以

     mov ebx, 05h
     mov eax, 08h
     cmp eax, ebx   (eax - ebx = 03h)
     此时我们的指令执行后(ZF = 0, PF = 1, SP = 0, CF = 0, OF = 0)


     那么上面我们分析了=(等于)、<(小于)     和>(大于) 的情况。接下来我们分析下 不等于、大于等于,小于等于的情况。


     首先分析不等于
   (我们分析题目,可以通过逆序的思路)假设此时我们的比较的两数值相等,则ZF=1,所以如果不相等,则ZF肯定不等于1,也就是ZF =0

     接着分析小于等于
     其实这个就是刚刚我们上面分析的+上等于的条件。我们看上面如果小于则SF = 1, CF =1。那么小于等于 CF =1 或 ZF =1。
   
   最后 大于等于
     这个我就不说了,同上,也让大家自己思考下。。



今天的课程就这么多了。最后作业列:

   1.假如此时有两数值做cmp比较判断,执行后ZF = 0 ,CF = 0 ,SF = 0。那么请问我们的数值是大于比较的数值,还是小于,或是等于。
ZF=0 不相等    a!=b
CF=0 没有借位 a>b
SF=0 正数

大于
 
   2.假如此时有两数值做cmp比较判断,执行后有可能ZF = 1,CF = 1 ,SF = 1 。那么请问我们的数值是大于比较的数值,还是小于,或是等于,或是大于等于,或是小于等于。
ZF = 1 相等 a==b
CF = 1 借位 a<b
SF = 1 负数 a<b

小于 等于
分享到:
评论

相关推荐

    常用ARM指令集及汇编.pdf

    ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令...

    arm汇编指令集大全

    1 ARM 汇编指令集 一、 跳转指令 跳转指令用于实现程序流程的跳转, 在 ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令。 Ⅱ.直接向程序计数器 PC 写入跳转地址值。 通过向程序计数器 PC 写入...

    AT&T汇编指令精简介绍

    好不容易找了一篇稍全面又简洁的指令集介绍 add,mov(bwl),test,sub,shr,cmp,lea,je,jne,ja,jb 列出来帮助搜索

    汇编语言指令系统、伪指令

    SUB、SBB指令、CMP、DEC、NEG 二进制乘法指令 MUL、IMUL 二进制除法指令 DIV、IDIV指令 十进制算术运算 非压缩BCD码调整指令AAA、AAS、AAM、AAD 压缩BCD码调整指令DAA、DAS 位   运算   ...

    《汇编语言》-第三版-王爽-以及课后答案

    2.3几条汇编指令 2.4物理地址 2.516位结构的CPU 2.68086CPU给出物理地址的方法 2.7“段地址×16+偏移地址=物理地址” 的本质含义 2.8段的概念 2.9段寄存器 2.10CS和IP 2.11修改CS、IP的指令 2.12代码段 实验1查看CPU...

    x86架构汇编指令介绍

    文中介绍了汇编指令add, sub, mul, div, inc, dec, cmp, and, or, xor, not, shl, shr, rol, ror, jmp, call, ret, push, pop, mov, lea, nop, xchg, test, fld, fst, fadd, fsub, fmul, fdiv, fist, fistp, fxch, ...

    汇编指令(chm格式)

    8088 汇编速查手册 一、数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. ...

    汇编语言汇指令集

    汇编语言指令集合 包括了(push,pop , mov ,pusf,popf ,add,adc,inc,sub,sbb,dec,neg,cmp,xchg,xor,daa,das,and,bt,not)指令

    汇编指令查询器

    汇编指令查询器 可以查看sub cmp add 等常见的指令意思

    常用汇编指令

    常用汇编指令 cmp a,b // 比较a与b mov a,b // 把b值送给a值,使a=b ret // 返回主程序 nop // 无作用 call // 调用子程序,子程序以ret结尾 je或jz // 相等则跳(机器码是74或84) jne或jnz // 不相等则跳...

    王爽著《汇编语言》课件及课后习题答案和实验解答

    实验1 查看CPU和内存,用机器指令和汇编指令编程 第3章寄存器(内存访问) 3.1 内存中字的存储 3.2 DS和[address] 3.3 字的传送 3.4 mov.add.sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制 3.8 栈顶超界的...

    c++编写的简单的汇编器

    汇编指令--&gt;机器码101010…… 在cmd中命令格式:ns &lt;rulefile name&gt; &lt;infile name&gt; 输入文件例: add $1,$2,$3 X1: sub $3,4,$3 cmp $3,$1 blet X1 sysint 1 寄存器格式为:$x 立即数支持十进制 支持行标号 ...

    asm 汇编语言基础知识

    实验一 DOS环境下的汇编语言编程环境使用(基础与验证型) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM的...

    汇编字符串比较

    输入字符串,可以比较两个字符串,其中用到CMP,还有LEA等汇编指令

    8051汇编语言指令速查表

    8051汇编语言指令速查表,非常齐全,对于初学者非常实用。

    汇编语言入门精品教程(chm)

    为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩...

    汇编语言(ASM)从入门到精通.chm

    对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序...为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)

    汇编常用命令(汇编语言的几条常用命令)

    根据条件作出是否跳转的决定,通常前面会有一个判断语句,例如: CMP AX,BX JZ XX 上面两条命令意为用AX减BX,它的值如果为0则跳转到XX的标号行. 常用的跳转命令有:

    汇编语言入门教程2007

    汇编语言入门教程2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长...为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……

    用lex与yacc构造汇编器vasm及其指令模拟器vsim

    用lex与yacc构造汇编器vasm及其指令模拟器vsim vasm及vsim源于Designing Digital Computer Systems with Verilog一书中定义的VeSPA(一个小型的RISC指令集的CPU)的指令集。 vasm通过两遍扫描的方式将VeSPA的汇编...

Global site tag (gtag.js) - Google Analytics