关哥的汇编笔记(三)寻址方式和指令系统

引言

每个存储单元只有一个物理地址,但它可由不同的段基址和偏移地址组成。物理地址 = 段基址 * 16 + 偏移地址

一 寻址方式

借用MOV指令来讲解寻址方式。MOV指令:将后面的赋值给前面的,后面的东西并不会受到影响。

1.1 立即寻址

相当于不用寻址,数字就在眼前。
将后面的数字直接赋值给前面寄存器。

MOV BL,66H
MOV AX,66H
MOV AX,1234H

后面的数字称为立即数,立即数的位数(bit)不能超过寄存器的位数。
立即数只能作源操作数,不能作目的操作数。

1.2 寄存器寻址

数字在CPU的寄存器中,而寄存器的名由指令指出。
将后面的寄存器中的值赋值给前面寄存器。

MOV AX,BX

两个寄存器的位数必须相同。

1.3 直接寻址

操作数有效地址(16位或32位)直接包含在指令中。如果指令无前缀指明在哪一段中,则默认操作数存放在数据段。

MOV AX,[2000H]    ;DS段2000H的内容送AL,2001H的内容送AH
MOV AX,ES:[2000H] ;ES段2000H的内容送AL,2001H的内容送AH

1.4 寄存器间接寻址

无前缀则默认操作数存放在堆栈段:[BP],[EBP],[ESP]
其他的寄存器无前缀则默认操作数存放在数据段。
其实和上面的直接寻址相同,只不过地址存放在寄存器中而不是直接给出。

MOV AX,[BX]    ; AX = (DS*10H+(BX))
MOV AX,[BP]    ; AX = (SS*10H+(BP))
MOV AX,ES:[BX] ; AX = (ES*10H+(BX))
MOV AX,DS:[BP] ; AX = (DS*10H+(BP))

1.5 相对寄存器间接寻址

MOV AX,2040H[BX]  ;将DS段(BX+2040H)的内容送给AX
MOV AX,[BX+2040H] ;和上面相同

1.6 基址加变址寻址

16位寻址

基址寄存器:BX、BP
变址寄存器:DI、SI

MOV  AX,[BX+SI] ;将DS段(BX+SI)的内容送给AX
MOV  AX,[BX][SI];和上面相同
32位寻址

基址寄存器:任何一个32位通用寄存器
变址寄存器:除ESP之外的任一个32位通用寄存器

MOV AX,[EBX+ECX] ;将DS段(EBX+ECX)的内容送给AX
MOV AX,[EBX][ECX];和上面相同

1.7 相对基址加变址寻址

[基址寄存器]+[变址寄存器]+偏移量

MOV AX,1234H[BX+DI]
MOV AX,[BX+DI+1234H]
MOV AX,1234H[BX][DI]

DS段(BX)+(DI)+1234H中的数据赋值给AX

1.8 小结

上面这么多种寻址方式,其实说白了只有两种:内容、地址。
只要区分是内容还是地址就行了。
带中括号的都是地址,不带中括号的都是内容。

二 指令系统

2.1 指令格式

指令格式: [标号:] 操作码 [操作数,…] [;注释]
其中: 标号:确定汇编语句的位置,提供跳转、循 环的目标。 操作码:汇编语句操作。 操作数:操作数据项,数目因操作码而异。 注释:程序注解。 如:START:MOV AX,DATA MOV DS,AX ;设置DS

2.2 指令种类

整数指令:数据传送、算术运算、逻辑 运算与移位、串操作、位操作指令、控 制转移、标志操作、 按条件设置字节、 处理器控制指令、高级语言指令等 –浮点数指令:数据传送、算术运算、比 较、超越函数、常量、控制等指令 –操作系统型指令

2.3 指令操作数符号说明

OP1,OP2,OP3:操作数
reg :通用寄存器。长度可以是8位、16位、32位
Sreg :段寄存器(段选择符)
reg8 :8位通用寄存器
reg16 :16位通用寄存器
reg32 :32位通用寄存器
mem :存储器。长度可以是8位、16位、32位
mem8 :8位存储器
mem16 :16位存储器
mem32 :32位存储器
imm :立即数。长度可以是8位、16位、32位
imm8 :8位立即数

发表评论

电子邮件地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部