转自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
小于 等于
分享到:
相关推荐
标题为“汇编语言基础--8086汇编指令[整理]”,这份文件是关于8086汇编语言的基础知识的整理。文档主要介绍和整理了8086汇编语言中的各种指令和操作,包括数据传送指令、算术指令、逻辑指令、程序控制指令等。这些...
本文将详细解析汇编指令,帮助初学者更好地理解和掌握这一基础概念。 1. **通用数据传送指令** - `MOV`: 用于在寄存器和内存之间,或者寄存器之间传输数据,如`MOV AX, BX`将BX的内容移动到AX。 - `MOVSX`和`...
在加密过程中,程序使用了 CMP 和 JNC 指令来判断字符是否在某个范围内,并使用 ADD 和 SUB 指令来进行加密。 在系统使用说明中,文章介绍了程序的运行结果界面,并提供了使用说明。 在问题及解决办法中,文章介绍...
IBM-PC汇编语言指令集是编程人员在编写低级程序时所使用的工具,主要用于直接控制计算机硬件。这些指令集包括了数据传送、算术运算、逻辑运算、位操作、程序流程控制等多个方面,用于实现复杂的计算任务和系统级操作...
X86汇编指令集是计算机体系结构中不可或缺的一部分,特别是在32位和64位的x86架构处理器中。这篇文档详细列举了汇编指令,并为每条指令提供了注释说明。以下知识点涵盖了文档中提及的关键指令及其功能。 一、数据...
本手册不仅提供了ARM汇编指令的详细说明,还介绍了这些指令在实际编程中的应用。对于初学者或进行ARM平台软件逆向工程的人员来说,这是一份非常实用的参考资料。然而,要注意的是,本手册也声明了其内容仅供学习和...
在汇编语言中,数据处理指令是编程的基础,它们用于执行基本的数据操作,如数据的传送、算术运算、位运算、比较测试等。这些指令是计算机硬件与软件交互的关键,使得程序员能够对处理器的寄存器和内存进行精确控制。...
在计算机科学领域,汇编语言是一种低级编程语言,它提供了一种将人类可读的指令转换为机器代码的方法。通过学习如何使用汇编语言进行基本的数学运算,我们可以更深入地理解计算机底层的工作原理。本文将详细介绍一个...
汇编语言是一种低级编程语言,通过使用汇编指令来控制计算机硬件。汇编语言通常用于编写操作系统、设备驱动程序、嵌入式系统和其他低级系统软件。 在这个例子中,我们看到的是一个使用MASM(Microsoft Macro ...
### 汇编指令详解及实例 #### 一、数据传输指令 1. **MOV**:将一个寄存器或内存中的数据复制到另一个寄存器或内存中。 - **示例**: ```assembly MOV AX, BX ; 将BX寄存器的值复制到AX寄存器中 MOV [DI], AL ...
在IT领域,汇编语言是一种低级编程语言,它与计算机硬件紧密相关,直接对应于机器指令。汇编语言的每个指令通常代表一个特定的CPU操作,...所以,让我们一起探索这111条汇编指令的世界,开启深入计算机硬件的旅程吧!
动画程序通常涉及到物体的动态移动和图形绘制,这需要对计算机内存、CPU指令以及图形输出有深入的理解。 首先,程序的核心在于对用户输入的处理,尤其是键盘事件。IBM汇编通过`int 16h`中断来捕获键盘输入。`ah`...
在汇编语言中实现字符串匹配,首先要熟悉汇编指令,如MOV(移动数据)、CMP(比较数据)、JZ(跳跃,如果零标志被设置)、JNE(跳跃,如果零标志未被设置)等。这些指令将用于读取、比较字符串中的字符,并根据比较...
在汇编语言中,数据处理指令是编程的基础,它们用于执行对寄存器或内存中的数据的各种操作。本文主要探讨汇编语言中的数据处理指令,包括数据传送、算术运算、位运算、比较测试以及如何在实际编程中使用这些指令。 ...
一、汇编指令基础 汇编指令是计算机能够直接理解和执行的低级指令,它们包括数据操作、控制流程、输入输出等多种类型。例如,常见的指令有: 1. 数据处理指令:如ADD(加法)、SUB(减法)、MUL(乘法)、DIV(除...
《8086汇编指令大全详解》 在计算机编程领域,汇编语言是一种低级编程语言,它直接对应于机器指令,对于理解和控制计算机硬件的运作有着至关重要的作用。8086处理器是Intel公司设计的一种16位微处理器,它的指令集...
"DSP C6000系列常用汇编指令大全" DSP C6000系列常用汇编指令大全是面向DSP C6000系列芯片的汇编指令大全,旨在供大家在编写汇编时进行参考,特别是在CCS中编C与汇编混合编程时。该文档包含了DSP C6000系列芯片的...
《汇编指令助手》 汇编语言,作为计算机科学的基础,是直接与机器硬件交互的编程语言。它是由一系列特定的指令集组成的,这些指令对应于计算机硬件的特定操作。在计算机系统中,汇编语言扮演着至关重要的角色,尤其...
“免杀等价替换汇编指令修改”这一标题所指代的技术,是通过修改程序中的汇编指令,使其功能保持不变但形式上有所差异,从而绕过现有的安全检测机制。这种技术通常被用于合法的逆向工程、软件调试或对抗性测试,但在...
在汇编语言的实现中,需要利用汇编指令直接操作内存和寄存器,处理数据的读写和计算。例如,使用PUSH和POP指令进行数据栈的管理,MOV指令进行数据的复制,CMP和JMP指令进行条件判断和跳转,以及循环指令如LOOP来实现...