原标题:常用的汇编指令

来源:爱达人编程达人

在这之前主要讲了两个问题,第一个问题是数据可以存哪?内存和寄存器。第二个问题是这些数据是如何存放的?我们介绍了两种模式:一个是小端存储,一个是大端存储。如果要处理数据,我们就要使用汇编指令。什么是汇编指令哪?在介绍汇编指令之前需要把它是什么搞清楚。

2.8.1【汇编指令】

汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉【汇编程序】如何执行【汇编指令】,它既不控制机器的操作也不被汇编编成机器代码,只能被汇编程序所识别并指导汇编如何执行。如图2-8-1所示,用黑色框框选出来的,就是汇编区域,一行组合在一起就是汇编指令。

本节介绍MOV、LEA、ADD、SUB 、AND、 OR、 XOR、 NOT和XCHG指令。

【MOV指令】

图2-8-1黑色框选区域中,有MOV DWORD PTR SS:[ESP+8],EBX;这条指令无非就是将EBX的数据移动到[ESP+8]对应的内存地址中去,大家可以反复操作观察。到目前为止,我们已经接触了MOV指令。现在回顾一下MOV指令,MOV指令用于数据移动,既然是移动,那么目的操作数的作用应该相当于一个“容器”,必须是具有大小范围的内存单元或寄存器;源操作数也可以是和目的操作数具有相同数据宽度的通用寄存器和内存单元,也可以是立即数。移动的指令只影响目的操作数的内容,不改变源操作数的内容。具体的指令格式如下:

1. MOV r/m8,r8 (r 通用寄存器)

2. MOV r/m16,r16(m代表内存)

3. MOV r/m32,r32(imm 代表立即数)

4. MOV r8,r/m8 (r8 代表8位通用寄存器)

5. MOV r16,r/m16(m8 代表8位内存)

6. MOV r32,r/m32(imm8 代表8位立即数)

7. MOV r8, imm8

8. MOV r16, imm16

9. MOV r32, imm32

【这些格式来源于Intel的白皮书,如果想详细了解MOV或其他汇编指令有哪些形式和用法可以查询Intel白皮书第2卷,第三章和第四章介绍的是汇编指令,所有的Intel的指令都在这里,虽然Intel和AMD是不同的CPU,但是它们都遵循的是80X86架构,绝大多数的指令是一样的。】

【LEA指令】

介绍了MOV指令,看图2-8-1中有LEA指令,LEA指令和MOV指令一样是移动数据,但是与MOV不同的是,它移动的是“[ ]”里面的内容,例如:LEA EAX,[ECX]中,执行这条指令相当于MOV EAX,ECX。而MOV EAX,[ECX]是把“[ ]”里面的数据当成是内存地址编号,取地址里面的内容。

我们将MOV EAX,ECX,LEA EAX,[ECX]在软件中编写观察。

第一步:输入指令,如图2-8-2所示,当前EAX存储的数据为0x002D2BA2,ECA存储的数据为0x00000000。

第二步:按F8一次观察,如图2-8-3所示。

第三步:由于EAX和ECX存储的数据都一样,我们改ECX存储的数据,更改为0x11111111。

选中ECX存储的数据0x00000000,右键弹出对话框,选择Modify,弹出对话框如图2-8-4所示,在黑色框选部分修改成0x11111111,如图2-8-5所示。

第四步:按F8观察,如图2-8-6对比这两条指令是否做着同样的工作。

经过实验表明,两个指令干了同一件事。自己动手实验完成下面例题并观察EAX与EDX里面的数据是否相同,总结这些指令都做了什么。

例:

MOV ECX,0x0012FF80 【0x0012FF80,该内存地址是已经申请过的,所以只要堆栈窗口中出现的内存地址,都可以使用】

MOV EAX,DWORD PTR DS:[ECX]

LEA EDX,DWORD PTR DS:[ECX]

LEA指令格式如下:

1、LEA r16,m16

2、LEA r32,m32

LEA指令它的源操作数只能是内存,目标操作数就只能是寄存器,不能操作8位数。

【ADD指令】

ADD表示“加”,“ADD 目标操作数,源操作数”:目标操作数+源操作数的结果保存在目标操作数中,举例说明ADD EAX,0x00000004,我们在软件中观察EAX的变化。

第一步:输入指令,为了方便观察我们手动更改EAX寄存器的数据,更改为:0x00000000,如图2-8-7所示。

第二步:按F8观察,EAX存储的数据的变化,如图2-8-8所示。

F8单步执行完,我们看到了EAX存储的数据发生了变化,变为了EAX原本存储的数据+0x00000004的数据。这就是ADD指令的大致做的工作。

ADD指令格式如下:

1. ADD r/m8,r8

2. ADD r/m16,r16

3. ADD r/m32,r32

4. ADD r8,r/m8

5. ADD r16,r/m16

6. ADD r32,r/m32

7. ADD r8/m8,imm8

8. ADD r16/m16,imm16

9. ADD r32/m32,imm32

例:

自己动手实验完成下面例题并观察总结这些指令都做了什么。

ADD EAX,ECX 寄存器到寄存器

ADD ECX,DWORD PTR DS:[0x0012FFC4] 内存到寄存器

ADD DWORD PTR DS:[0x0012FFC4],0x12 立即数到内存

【SUB指令】

SUB表示“减”,“SUB 目标操作数,源操作数”:目标操作数-源操作数的结果保存在目标操作数中,它的格式同MOV、ADD一样。举例说明SUB EAX,0x00000004,我们在软件中观察EAX的变化。

第一步:输入指令,EAX当前存储的数据为0x00000004如图2-8-9所示。

第二步:按F8执行之后观察EAX存储的数据变化,如图2-8-10所示。

F8单步执行完,我们看到了EAX存储的数据发生了变化,变为了EAX原本存储的数据-0x00000004的数据。这就是SUB指令的大致做的工作。

例:

自己动手实验完成下面例题并观察总结这些指令都做了什么。

SUB EAX,ECX 寄存器到寄存器

SUB ECX,DWORD PTR DS:[0x0012FFC4] 内存到寄存器

SUB DWORD PTR DS:[0x0012FFC4],0x12 立即数到内存

【AND指令】

AND表示“与”,“AND 目标操作数,源操作数”:目标操作数与源操作数做“与运算”,结果保存在目标操作数中。

例:

自己动手实验完成下面例题并观察总结这些指令都做了什么。

MOV AL, 0x01

AND AL, 0x10

【OR指令】

OR表示“或”,“OR 目标操作数,源操作数”:目标操作数与源操作数做“或运算”,结果保存在目标操作数中。

例:

自己动手实验完成下面例题并观察总结这些指令都做了什么。

MOV AL, 0x11

OR AL, 0x10

【XOR指令】

XOR表示“异或”,“XOR 目标操作数,源操作数”:目标操作数与源操作数做“异或运算”,结果保存在目标操作数中。

例:

自己动手实验完成下面例题并观察总结这些指令都做了什么。

MOV AL, 0x11

XOR AL, 0x11

【NOT指令】

这个指令和上面的指令有所区别,它的意思是对某个值求反,只涉及一个数,所以它的格式如下:

NOT r/m8

NOT r/m16

NOT r/m32

【XCHG指令】

CHG表示英文change,表示两个容器交换数据,源操作数不能是立即数,主要功能将一个字节或一个字的源操作数和目的操作数相交换。

交换指令可以在寄存器之间,寄存器与存储器之间进行,具体形式如下:

XCHG r8/m8,r8

XCHG r16/m16,r16

XCHG r32/m32,r32

XCHG r8,m8

XCHG r16,m16

XCHG r32,m32

自己动手实验完成下面例题并观察总结这些指令都做了什么。

注意XCHG指令在使用时记住以下几点:

1、不能同时都为内存操作数

2、任何一个操作数都不能为段寄存器

3、任何一个操作数不能为立即数

4、两个操作数的长度必须相等

下节介绍内存复制。

练习:

1、已知EAX=0x00000008,ECX=0x0000000F,执行下面语句后,求EDX的数据

LEA EDX,DWORD PTR DS:[EAX+ECX]

2、已知EAX=0xFFFFFFFF,ESP=0x00000002,执行下面语句后,求EDX的数据

LEA EDX,DWORD PTR DS:[EAX+ESP*2]

3、已知EAX=01011100 ECX=11101111,EDX=11101110,执行下面语句后,求EDX的数据

LEA EDX,DWORD PTR DS:[EAX+ECX*2]

4、使用 MOV指令、ADD指令、SUB指令、AND指令、OR指令、XOR指令和 NOT指令 中的每一种格式做一个实验观察执行后的效果。(本节内容中已经把格式写出来,主要目的是锻炼动手能力)。

声明:【版权归作者所有。若未能找到作者和原始出处,还望谅解,如原作者看到,欢迎联系盟君认领(可发邮至3173886122@qq.com或直接在公众号留言),盟君会在后续文章声明中标明。如觉侵权,盟君会在第一时间删除。多谢!】

致敬:向本文原创者致以崇高敬意!

版权声明为粉丝提供创业平台

责任编辑:

汇编语言中xor指令_常用的汇编指令相关推荐

  1. 汇编语言中xor指令_汇编各类指令用法及含义分析 - 全文

    什么是汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指 ...

  2. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)...

    汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号 ...

  3. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作...

    XOR 指令在两个操作数的对应位之间进行(按位)逻辑异或(XOR)操作,并将结果存放在目标操作数中: XOR destination, source XOR 指令操作数组合和大小与 AND 指令及 O ...

  4. 汇编语言中xor指令_这个汇编代码有什么作用? (TEST,XOR,JNZ)

    TEST和XOR是用于对操作数执行逻辑运算的逻辑指令. 测试指令(比较操作数) TEST destiny, source 它执行操作数的逐位连接,但与AND不同,该指令不会将结果放在目标操作数中,它只 ...

  5. 汇编语言中xor指令_XOR寄存器,寄存器(汇编程序)

    xor%ax,%ax,如先前评论中所述,对应于ax = ax xor ax.这基本上设置ax = 0.此外,它还影响/修改一些EFLAGS,例如OF,CF,SF,PF或ZF.在这种情况下,将设置PF和 ...

  6. 汇编语言中sbb是什么意思_汇编语言里 sub是 什么功能?

    汇编语言里 sub是 什么功能?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 汇编语言里 sub是 什么功能? 是减法 ...

  7. linux汇编语言cmp,汇编语言中cmp指令用法笔记与总结

    这篇文章主要介绍了汇编语言中cmp指令用法,结合实例形式总结分析了汇编语言cmp指令基本功能.使用方法及操作注意事项,需要的朋友可以参考下 本文实例讲述了汇编语言中cmp指令用法.分享给大家供大家参考 ...

  8. c语言loop指令,汇编语言中loop指令的使用

    现在在学习汇编,感觉挺有意思的!,我就把学习的东西写下来吧,当作以后可以学习的笔记- loop指令的格式是:loop标号,cpu执行loop指令的时候,要进行两步操作 1:(cx)=(cx)-1 2: ...

  9. 计算机汇编指令mov和mova,汇编语言中mov和lea指令的区别详解

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行.汇编器将指令翻译为机器语言字节,并且在运行时由 CPU 加载和执行. 一条指令有四个组成部分: 标号(可选) 指令助记符(必需) ...

  10. 汇编中的la_汇编语言中,SP,BP ,SI,DI作用?

    这个很简单: sp:表示栈顶指针,指向栈顶地址.与SS相配合使用.ss为栈段. bp:是基址指针,段地址默认在SS中.可以定位物理地址,比如:"mov ax,[bp+si+6]/mov ax ...

最新文章

  1. java no cache_java – 在我的部署中设置Cache-Control no-cache,no-store是什么?
  2. 车辆管理系统之开始自己的任务(三)
  3. qt 实现自己的小笔记本(哼。拿下本本记下来了
  4. SQLServer数据库文件组相关知识笔记
  5. 一文教你掌握 ZooKeeper 核心知识
  6. Linux命令学习手册-tr命令 2015-07-26 20:35 9人阅读 评论(0) 收藏...
  7. 如何在linux内核中读写文件
  8. 通过js适配不同的屏幕大小
  9. MyBatis框架学习笔记03:利用MyBatis实现关联查询
  10. python list remove_python list有关remove的问题
  11. 魔术师利用一副牌中的13张红桃c语言,魔术师的猜牌术(1) 魔术师利用一副牌中的13张黑桃 - 下载 - 搜珍网...
  12. Ubuntu18.04安装python3.7.7和tensorflow-gpu 2.2.0
  13. 高斯09linux教程,Gaussian 09的安装与使用
  14. 微信小程序弹框滑动冒泡,外层页面也被滑动问题
  15. Python 下载百度文库
  16. html圆圈男女,html 圆形符号
  17. 《美国职业橄榄球大联盟》:NFL·王牌四分卫
  18. PyG搭建GCN实现节点分类(GCNConv参数详解)
  19. Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  20. 电脑不小心删除文件如何找回?你还不知道这3个小技巧?

热门文章

  1. miRNA数据库篇——RNAcentral
  2. AndroidStudio配置一键360加固gradle脚本
  3. 最好用图像处理库CxImage入门
  4. T100服务端接口开发步骤
  5. 手机腾讯视频离线缓存ts格式文件合并为完整视频
  6. 出入机房计算机无登记表,三峡大学机房维护管理制度
  7. 音频传输中的I2S协议
  8. Java第二十七篇:二维数组打印九九乘法表(三角形、矩形、菱形)
  9. RSAC2020的PPT下载
  10. ffmpeg 转码及多线程处理