汇编指令之CMP, TEST指令

一、CMP指令

这一块呢,我不想上图了,汇编的博文我已经快要让我写吐了,其实也有好多我没有补充进来,比如进制,LEA指令,数据宽度,有符号,无符号的区分等等,但我真的要吐了,这些玩意我已经不是第一次写了,也不是第一次看了,以前我是习惯于在EXCEL上写,这一次由于是我对汇编遗忘的有点狠,想从头复习一遍,刚好把这个复习的过程上传到博客园来,于是就有了这些文章,这两条指令,如果有兴趣,大家自己去测试测试吧

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,20:23:27。
作者By-----溺心与沉浮----博客园

指令格式:CMP  R/M,R/M/IMM

CPM指令相当于SUB,唯一不同的是它不改变操作数或者寄存器的值

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。

只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。

MOV EAX,100

MOV ECX,100

CMP EAX,ECX    观察Z位

MOV EAX,100

MOV ECX,200

CMP EAX,ECX    观察S位

CMP AX,WORD PTR DS:[405000]

CMP AL,BYTE PTR DS:[405000]

CMP EAX,DWORD PTR DS:[405000]

二、TEST指令

指令格式:TEST  R/M,R/M/IMM

该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位.

与的操作表项如下:

1 and 1 = 1

1 and 0 = 0

0 and 1 = 0

0 and 0 = 0

常见用法:用这个指令,可以确定某寄存器是否等于0。

TEST EAX,EAX    观察Z位

但是如果EAX的二进制某些位为1的话,那么运算的结果就不为零。

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。2019-09-06,20:23:27。
作者By-----溺心与沉浮----博客园

原文地址:https://www.cnblogs.com/Reverse-xiaoyu/p/11478355.html

时间: 2024-10-08 03:18:48

汇编指令之CMP, TEST指令的相关文章

汇编中的跳转指令

能修改CS以及IP的指令都是转移指令.它分为段内转移,段间转移. 段内转移:只修改IP的值 段间转移:同时修改CS以及IP的值 段内转移根据转移的距离远近分为:短转移,近转移 短转移:转移范围为-128 – 127 近转移:转移范围为-32768 –32767 根据转移情况又分为: 无条件转移指令 条件转移指令 循环指令 过程 中断 <1> jmp short xxx(行号) 这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标

汇编总结:左移,右移指令

左移指令和右称指令的种类及作用: 左移指令作用:左移指令将操作数的bit位向左移动n位,空出来的位用0填充. 左移指令包含sal和shl,这两条指令的作用是相同的,空出来的位用0填充. 其中左移sal的指令用法: .section .text .global _start _start:     movb $0b11111111, %al  #8字节     salb $3, %al      movw $0b11111111, %ax  #16字节     salw $3, %ax      

汇编-10.0-CALL和RET指令

call和ret指令都是转移指令,他们都是修改IP,或同时修改CS和IP.它们常被共同用来实现子程序设计. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移: retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移: CPU执行ret指令时,进行下面两步操作: (1).(IP)=((ss)*16+(sp)) (2).(sp)=(sp)+2 用汇编语法解释,相当于: pop IP CPU执行retf指令时,进行下面4步操作: (1).(IP)=((ss)*16+

汇编--指令系统 数据传送类指令

(1) 数据传送类指令 通用数据传送指令:MOV .PUSH.POP.XCHG 交换指令 累加器专用传送指令: IN.OUT .XLAT 换码指令 地址传送指令:LEA.LDS.LES 标志寄存器传送指令:LAHF.SAHF.PUSHF.POPF 类型转换指令:CBW.CWD.CDQ.BSWAP MOV指令 对于存储器单元与立即数同时作为操作数的情况,必须显式指明   ;byte ptr 说明是字节操作   ;word ptr 说明是字操作 mov [bx],[si+2]  错误 不允许立即数传

JSP的3个编译指令,7个动作指令

3个编译指令 1.page指令 page指令用户定义JSP页面中的全局属性,它的语法格式如下: <%page {language="java"} {extends="package.class"} {import="{package.class|package.*},..."} {session="true | false"} {buffer="none | 8kb | sizekb"} { fals

jsp的常用指令有哪些(编译指令/动作指令整理)

jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释

angular指令详解--自定义指令

自定义指令 directive()这个方法是用来定义指令的: angular.module('myApp', []) .directive('myDirective', function ($timeout, UserDefinedService) { // 指令定义放在这里 }); directive() 方法可以接受两个参数:1. name(字符串)指令的名字,用来在视图中引用特定的指令.2. factory_function (函数)这个函数返回一个对象,其中定义了指令的全部行为.$com

汇编中Enter与Leave指令

Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见,函数调用完后一般的用到 以上的Enter和leave的作用分别函数开始和结束 Win32汇编中局部变量的使用方法可以解释一个很有趣的现象:在DOS汇编的时候,如果在子程序中的push指令和pop指令不配对,那么返回的时候ret指令从堆栈里得到的肯定是错误的返回地址,程序也就死掉了.但在Win32汇

一个卓有成效的汇编优化范例--使用SSE2指令优化进制转化

我的一个感兴趣的编程方向是大数计算,因此用汇编语言写了很多大数计算方面的小程序,上周突然想出一个使用SSE2指令将整数转为16进制字符串的好主意,遂付诸实现.原以为至多可提速500%,那知测试后发现,相对于最初的C语言版本,速度竟提高20倍以上,兴奋之余,遂有了这篇博客文章. 这个程序主要示范将64bit一个整数转化为16进制字符串的功能,功能和算法都比较简单.我相信许多人都写过类似的程序,但不知有没有人尝试去你优化它.这个示范程序包括3个C语言版和1个使用SSE2指令的汇编语言版.下面我们给出