首页
论坛
课程
招聘
[分享]汇编学习笔记
2008-12-25 23:12 22103

[分享]汇编学习笔记

2008-12-25 23:12
22103
小弟初学汇编。刚学到寄存器和寻址方式。整理了点笔记,拿出来给跟我同样初学的弟兄分享。 
一、寄存器
总共有14个16位寄存器,8个8位寄存器

通用寄存器:
  数据寄存器:
  AH(8位)  AL(8位)  AX(16位)   (AX和AL又称累加器)
  BH(8位)  BL(8位)  BX(16位)   (BX又称基址寄存器,唯一作为存储器指针使用寄存器)  
  CH(8位)  CL(8位)  CX(16位)   (CX用于字符串操作,控制循环的次数,CL用于移位)
  DH(8位)  DL(8位)  DX(16位)   (DX一般用来做32位的乘除法时存放被除数或者保留余数)

  指针寄存器:
  SP 堆栈指针 (存放栈顶地址)
  BP 基址指针 (存放堆栈基址偏移)

  变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,
  即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操
  作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.

  SI 源地址  (源变址寄存器)
  DI 目的地址 (目的变址寄存器)
  
控制寄存器:
  IP 指令指针
  FLAG 标志寄存器
   ① 进位标志 CF,记录运算时最高有效位产生的进位值。
      ② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。
        ③ 零标志  ZF,运算结果为0时ZF位置1,否则置0。
        ④ 溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
        ⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。
        ⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。

段寄存器
  CS 代码段  IP
  DS 数据段  
  SS 堆栈段  SP BP
  ES 附加段

二、七种寻址方式:
1、立即寻址方式:
操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。立即数可以是8位的,也可以是16位的。
例如:
    指令: MOV AX,1234H
      则: AX = 1234H

2、寄存器寻址方式:
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。
对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数
因而可以取得较高的运算数度。

3、直接寻址方式:
操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)
注:操作数一般存放在数据段
所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用
段超越前缀,则操作数也可含在数据段外的其他段中。
例如:
MOV AX,[8054]
如(DS) = 2000H,
则执行结果为(AX) = 3050H
(物理地址=20000+8054=28054H)
28054H里的内容为3050H

在汇编语言指令中,可以用符号地址代替数值地址
如:MOV AX,VALUE
此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:
MOV AX,ES:VALUE 或 MOV AX,ES:[VALUE]

4、寄存器间接寻址方式:
操作数在寄存器中,操作数有效地址在SI、DI、BX、BP
这四个寄存器之一中。在一般情况下,如果有效地址在
SI、DI和BX中,则以DS段寄存器中的内容为段值。如果
有效地址在BP中,则以SS段寄存器中的内容为段值
例如:
MOV AX,[SI]
如果(DS) = 5000H (SI) = 1234H
则物理地址 =  50000 + 1234 = 51234H
51234H地址中的内容为:6789H
执行该指令后,(AX) = 6789H

5、寄存器相对寻址方式:
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)
或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和

    BX  8位 位移量
EA(有效地址) =  BP  + 
    SI  16位 位移量
    DI
在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么
引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的
段寄存器是SS。

物理地址 = 16d × (DS) + (BX) + 8
           或(SI)或16位位移量
           或(DI)
物理地址 = 16d × (SS) + (BP) + 8位位移量
                       或16位位移量
在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如
位移量是8位,则被带符号扩展成16位。
例如:
MOV AX,[DI+1223H]
假设,(DS) = 5000H,(DI) = 3678H
则物理地址 = 50000 + 3678 + 1233 = 5489BH
5489BH地址中的内容:55AAH
执行该指令后AX = 55AAH
下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS: MOV BX,[BP-4]
下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES: MOV ES:[BX+5],AL
指令:MOV AX,[SI+3]与MOV AX,3[SI]是等价的

6、基址加变址寻址方式:
操作数在寄存器中,操作数的有效地址由:
基址寄存器之一的内容与变址寄存器之一的内容相加
   BX   SI
即: EA =    + 
   BP   DI
在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值,否则已DS
为段值。
例如:
MOV AX,[BX][DI]
如:(DS)=2100H,
   (BX)=0158H,
   (DI)=10A5H
则EA=0158 + 10A5 = 11FD
物理地址=21000 + 11FD = 221FDH
221FDH地址中的内容:1234H
执行该指令后AX = 1234H

下面指令中,目的操作数采用基址加变址寻址,
引用的段寄存器是DS: MOV DS:[BP+SI],AL

下面指令中,源操作数采用基址加变址寻址,
引用的段寄存器ES: MOV AX,ES:[BX+SI]

这种寻址方式使用与数组或表格处理。用基址寄存器存放数组首地址,而用变地寄存器
来定位数组中的各元素,或反之。由于两个寄存器都可改变,所以能更加灵活地访问数
组或表格中的元素。
下面的两种表示方法是等价的:
MOV AX,[BX+DI]
MOV AX,[DI][BX]

7、相对基址加变址寻址方式:
操作数在存储器中,操作数的有效地址由于基址寄存器之一的内容与变址寄存器之一的
内容及指令中给定的8位或16位位移量相加得到。
         BX    SI    8位
即: EA =     +     +      位移量
   BP    DI    16位
在一般情况下,如果BP中的内容作为有效地址的一部分,则以SS段寄存器中的内容为段
值,否则以DS段寄存器中的内容为段值。
在指令中给定的8位或16位位移量采用补码形式表示。
在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。
当所得的有效地址操作FFFFH时,就取其64K的模
例如:
MOV AX,[BX+DI-2]
假设,(DS) = 5000H, (BX) = 1223H, DI = 54H, (51275) = 54H, (51276) = 76H
物理地址= 50000 + 1223 + 0054 + FFFE(-2 各位取反末位加一) = 51275H
执行该指令后 (AX) = 7654H

相对基址加变址这种寻址方式的表示方法多种多样,以下四种方法均是等价的:
MOV AX,[BX+DI+1234H], MOV AX,1234H[BX][DI]
MOV AX 1234H[BX+DI],  MOV AX,1234H[DI][BX]

《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

收藏
点赞0
打赏
分享
最新回复 (42)
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
江树清 活跃值 2008-12-25 23:28
2
0
不错~~~~~~~~~~~~~
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenjinlin 活跃值 2008-12-25 23:35
3
0
多谢分享
雪    币: 695
活跃值: 活跃值 (26)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
mik 活跃值 4 2008-12-25 23:38
4
1
没用的

抛开书本,你记住了吗? 理解了吗?

罗列出一大堆,倒还不如背书
雪    币: 232
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
edison黄 活跃值 2008-12-26 00:00
5
0
觉得寻址这一块是关键。所以列的比较详细点。并附了相应的例子。应该比较容易理解。如果楼上的那位大哥有更好的学习方法。能否拿出来给我们这些新人分享一下。谢谢
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jekey 活跃值 2008-12-26 00:07
6
0
学起来有点难度
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zheng郑 活跃值 2008-12-26 18:58
7
0
记不住,学起来相当难
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ltr 活跃值 2008-12-28 14:48
8
0
汇编语言难学。
雪    币: 71
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑焰 活跃值 2008-12-29 13:11
9
0
学完就总结,总结了还分享  好人啊!!!!!!!!!!!!!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shadowlu 活跃值 2008-12-31 14:33
10
0
不错,我学过的都快忘光了,不过这个是8086的现在都是32位下面的了要学win32下面的汇编了。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
猪头啊大 活跃值 2008-12-31 15:11
11
0
谢谢,正好适合偶这样的菜鸟学习
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seis 活跃值 2009-1-2 04:55
12
0
我也最近开始学汇编,不过先学组成原理先。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
未知ahce 活跃值 2009-1-8 04:34
13
0
学习不能急。呵呵
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xmren 活跃值 2009-1-8 05:01
14
0
谢谢,刚好有用
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
狼头头 活跃值 2009-1-9 12:37
15
0
还好还好~能看懂
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qubick 活跃值 2009-1-12 23:19
16
0
我也正在补习汇编,LZ的总结的很全面,收藏了,谢谢哦
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
crarook 活跃值 2009-1-13 10:24
17
0
谢谢 楼主分享啊  我不用做 笔记了啊  哈哈
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
凉州愚叟 活跃值 2009-2-11 17:45
18
0
谢谢楼主分享,学习一下下!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaogu 活跃值 2009-2-12 13:28
19
0
支持 顶~!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
凉州愚叟 活跃值 2009-2-12 16:20
20
0
这个好,期待更多的好东东!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qwqwpl 活跃值 2009-2-15 18:48
21
0
太少了把~!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hzieeming 活跃值 2009-2-25 15:04
22
0
学习了
雪    币: 13
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 活跃值 2009-3-5 10:04
23
0
如果光为了调试的话,不用这么细吧
调试主要看打断汇编的统筹把握
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
工藤柯楠 活跃值 2009-3-28 01:07
24
0
这个和中山大学那个老师讲的视频好象呀,不过我都没记到这么多,,,希望你有后续的总结发上来哟,,,,
雪    币: 339
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑色菜虫 活跃值 2009-4-13 02:08
25
0
额。 论坛好像没有收藏帖子的按钮是吗?
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
marinus 活跃值 2009-4-13 23:10
26
0
谢谢,希望你继续学习跟总结哦,共同进步
雪    币: 2249
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mubai 活跃值 2009-4-15 21:11
27
0
感谢分享,4年没有看汇编了,今天再看一下了。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zgq 活跃值 2009-5-9 07:41
28
0
要想学会就得全背下来啊,真难啊
雪    币: 82
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
brkdancer 活跃值 2009-5-12 20:15
29
0
学习了,谢谢楼主
雪    币: 49
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arpu 活跃值 2009-6-5 10:28
30
0
看不太懂 呵呵
雪    币: 59
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
欧帅 活跃值 2009-6-8 11:23
31
0
总结得不错,向你这排头兵看齐。
雪    币: 192
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenwq 活跃值 2009-6-8 11:42
32
0
呵呵,不错,楼主是不是正在学习王爽的汇编呢,我也买了一本,正在学习呢
雪    币: 2687
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
溯雪 活跃值 2009-6-11 03:52
33
0
希望大家多把学习的新的体会拿到论坛上来交流讨论,这样大家才能共同进步!
雪    币: 247
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
insectzl 活跃值 2010-8-28 20:00
34
0
这个贴子好,真正的适合我们新手,愿大家共同进步。
雪    币: 126
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jokersky 活跃值 1 2010-9-4 05:08
35
0
先顶在慢慢看
雪    币: 132
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liqiang 活跃值 2010-9-5 15:24
36
0
不错不错,挺基础的,蛮适合刚入门的
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cylhb 活跃值 2010-9-9 13:18
37
0
- -之前看过王爽的,忘得差不多了,复习一下,发现还是有些东西记得的。。加油
雪    币: 126
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jokersky 活跃值 1 2010-10-24 03:09
38
0
路过 看过 灌水
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icemanwd 活跃值 2010-10-27 10:37
39
0
谢谢分享 还不错 虽然很基础
雪    币: 503
活跃值: 活跃值 (28)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
Hefe 活跃值 3 2011-3-21 13:58
40
0
BX    SI    8位
即: EA =     +     +      位移量
   BP    DI    16位

请问这是什么意思?
楼主能留个邮箱或是qq吗?你写的有几点我没明白
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wankeer 活跃值 2011-3-22 11:12
41
0
谢谢分享,想请教初学者学汇编该从哪入手?帮忙推荐本入门教材吧
雪    币: 233
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lijianhai 活跃值 2011-3-23 10:03
42
0
学习中,多谢
雪    币: 41
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zqqbbgs 活跃值 2011-4-25 07:52
43
0
学手学习了,确实好~~
游客
登录 | 注册 方可回帖
返回