2.8 常用的汇编指令

2.8 常用的汇编指令

本节必须掌握的知识点:

       汇编指令

   多动手实验,知道每个指令的功能

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

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, 0x01AND AL, 0x10

【OR指令

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

例:

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

MOV AL, 0x11OR AL, 0x10


【XOR指令

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

例:

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

MOV AL, 0x11XOR 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、两个操作数的长度必须相等

下节介绍内存复制。

练习:

[if !supportLists]1、[endif]已知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] 

[if !supportLists]3、[endif]已知EAX=01011100 ECX=11101111,EDX=11101110,执行下面语句后,求EDX的数据

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 原文: GCC-Inline-Assembly-HOWTO 1. 简介(Introduction.) 1.1 Co...
    桂糊涂阅读 4,526评论 1 5
  • OD专题 OD常用快捷键 各类调试断点 F2断点(CC断点,int3断点) 内存断点内存访问断点(对内存执行、写入...
    LazzMan阅读 1,183评论 0 0
  • 原文作者 Sandeep.S英文原文 [https://www.ibiblio.org/gferg/ldp/GCC...
    JeffreyLi阅读 39,955评论 8 41
  • 学习汇编前你应该知道的知识 收录的一篇很好的文章, 值得分享出来 , 找不到原著的链接了 1、汇编需要什么工具和程...
    西博尔阅读 3,629评论 6 20
  • 1.哈哈,感恩今天早上醒来我又是健康有活力的,谢谢,谢谢,谢谢 2.感恩早上做的公交车这么顺利通畅,谢谢,谢谢,谢...
    飞雁辉阅读 257评论 0 0