文章目录
汇编 指令系统和寻址方式
一、汇编语言指令
1.1 机器指令
- 机器指令也称为代码指令,它是计算机能识别的一组二进制代码。
1.2 汇编指令
- 指令的格式:操作码字段 操作数字段;
- 操作码:采用类英文单词的助记符来指明指令操作的性质,即说明要执行的是什么操作;
- 操作数: 由寄存器、储存单元、立即数等构成,用来指明被操作的数据的值或数据的存放位置,可以有0个、1个,2个或3个;
- 指令属性:由指令长度和指令执行时间构造;
1.3 指令系统
- 定义:是计算机所能执行的各种代码指令的集合;
- 分类:分6类;
二、指令的寻址方式
2.1 寻址方式
-
定义:指令中提供操作数或操作数地址的方式。
-
分类:在汇编语言中,操作数分为数据操作数和转移地址操作数两类。按照操作数的类型不同,寻址方式也分数据有关的寻址方式和转移地址有关的寻址方式,以下是数据有关的寻址方式;
2.2 立即数寻址
- 定义:所要找的操作数直接写在指令中,这种操作数叫立即数。指令中有立即数的寻址方式叫立即寻址;
- 立即数的范围:在8086中,立即数是8位或16位的。因此,操作数可以是各种数制下的数值(相当于8位或16位二进制数),也可以是带单引号的字符。
- 注意
(1)立即数不能作目的操作数,只能用于源操作数字段;
(2)源操作数和目的操作数要互相匹配。目的操作数是字节,立即操作书也必须是字节,或者两者都是字;
2.3 寄存器寻址
- 定义:操作数在寄存器中,在指令中指定寄存器名,CPU在寄存器中得到操作数。
- 寄存器操作数:放在8个通用寄存器或4个段寄存器中的操作数
- 寄存器:
8位寄存器 AH AL BH BL CH CL DH CL 16位寄存器 AX BX CX DX SI DI BP SP - 优缺点
(1)优点:寻址方式指令短,速度快;
(2)缺点:可用资源少;
2.4 存储器寻址
- 定义:程序运行时用到的数据决大部分存放在内存中,如何寻找内存中的数据就是存储器寻址方式。
- 存储器操作数:存放在存储单元中的操作数。
- 存储器操作数的类型:字节(一个存储单元)、字(两个存储单元)、 双字(四个存储单元);
- 注意
(1)若指令中没有指明所涉及的段寄存器, C P U CPU CPU就采用默认的段寄存器来确定操作数所在的段;
(3)存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出;
(3)不允许两个操作数同时为存储器操作数。
三、5种存储器寻址
3.1 直接寻址
-
定义:在指令中直接给出操作数所在单元的偏移地址。操作数的段地址为数据段,由 D S DS DS指出,即操作数本身存放在数据段中。 C P U CPU CPU在取指令阶段可以直接取得操作数,因此称为直接寻址方式。
-
指令格式
MOV AX,DS:[2000H]
-
注意
在书写源程序时,对于直接寻址方式,必须用前缀“ D S : DS: DS:”指出该单元在数据段。如果没写前缀,则系统用 M A S M MASM MASM汇编时就会认为 2000 H 2000H 2000H是立即数而不是偏移地址。但是,如果用 D E B U G DEBUG DEBUG的 A A A命令输入指令,就不需要加上前缀,系统会默认为数据段。
3.2 寄存器间接寻址
- 定义:操作数的偏移地址放在寄存器中,只有 S I SI SI、 D I DI DI、 B X BX BX和 B P BP BP可作间址寄存器。操作数的段地址放在数据段 D S DS DS或堆栈段 S S SS SS;
- 指令形式
MOV AX,[BX]
- 注意:如果有效地址有 B X BX BX、 S I SI SI、 D I DI DI指出,则默认对应于数据段,而用 B P BP BP指出则对应于堆栈段;
- 例如
MOV AX,[BX];AX←[DS×16+BX] MOV AL,[BX];AL←[DS×16+BX] MOV AX,[SI];SI←[DS×16+SI] MOV AX,[DI];AX←[DS×16+DI] MOV AX,[BP];AX←[SS×16+BP]
3.3 寄存器相对寻址
- 定义:偏移地址等于间址寄存器的内容加上一个8或16位的位移量之和;
- 指令格式
MOV AX,[BX+1234H]
- 注意:与寄存器间接寻址一样,只有 S I SI SI、 D I DI DI、 B X BX BX和 B P BP BP可作间址寄存器;
3.4 基址变址寻址
- 定义:由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址+变址寻址;
- 指令格式
MOV AX,[BX+SI]
- 注意:基址寄存器为 B X BX BX、 B P BP BP,变址寄存器为 S I SI SI、 D I DI DI;
3.5 相对基址变址寻址
- 定义:一个基址寄存器的内容和一个变址寄存器的内容的基础上再增加一个8位或16位偏移量,三者之和为偏移地址。
- 指令格式
MOV AX,[BX+SI+1234H]
- 注意:与基址变址寻址相同;