寻址方式
我们都知道,一条指令由两部分组成,分别是操作码和操作数。
- 操作码:表示该指令的具体操作
ADD、PUSH、POP、MOV
等等,也称作助记符 - 操作数:就是操作符要操作的对象,。一条操作符后面可以跟一个或多个操作数。
那么什么叫寻址方式?
- 寻址方式就是找到所需操作的各种方法。也就是找到操作数储存地点的方法。
在8086/8088中提供操作数的方法有四种
立即数操作数:操作数在指令代码中提供。
ADD AX, 6
其中6
就是立即数操作数。- 寄存器操作数:操作数被储存在CPU的通用寄存器或段寄存器中。
ADD AX, 6
其中AX
就是寄存器操作数。 - 存储器操作数:操作数储存在内存中。
- I/O端口操作数:操作数在输入/输出接口的寄存器中。
- 寄存器操作数:操作数被储存在CPU的通用寄存器或段寄存器中。
立即数寻址
在立即数寻址方式中,所需操作数在指令代码中。立即数可以是8位,也可以使16位。
例:MOV AH,20H MOV AX,20H
第一个表示将8位立即数20H送入AH中。
第一个表示将16位立即数20A0H送入AH中。
- 这种寻址方式执行速度特别快,因为在指令执行的过程中,立即数直接作为指令的一部分从BIU的指令队列中取出,不需额外占用总线周期。
注:立即数只能作为源操作数而不能作为目的操作数(就是只能做后面的那一个操作数),因为它只是一个数字,没有储存空间
###寄存器寻址
寄存器寻址方式是指操作所需的操作数在CPU的某个寄存器中,可以是(8个)通用寄存器也可以是段寄存器。如
AH、AL、AX、CX、DS、ES
等。例:
MOV AX. BX MOV AX. BX
- 由于存取寄存器操作数完全在CPU中进行,不需要总线周期,所以执行速度也很快。
##存储器操作数
首先先来介绍一下存储单元逻辑地址的表示形式:段基址:偏移量
- 段基址:由某个段寄存器提供
偏移量:表示该储存单元与该段起始地址之间的距离,也叫做有效地址EA。
同时 有效地址EA 是以下三个地址分量的几种组合,有- 位移量:是指令中直接给出的一个8位或16位数。一般以操作数名字(变量名或标号)的形式出现。
这句话什么意思宝宝也不知道 - 基址:基址寄存器BX或基址指针寄存器BP所提供的内容。
- 变址:由源变址寄存器SI或目的变址寄存器DI所提供的内容。
位移量、基址和变址三个地址分量进行组合时,若有两个以上的分量,将进行以$2^16$为模的十六位加法运算。
- 位移量:是指令中直接给出的一个8位或16位数。一般以操作数名字(变量名或标号)的形式出现。
直接寻址
EA地址只有一个位移量分量
直接寻址方式用符号或常数来表示
用符号表示:
例:
MOV BX, VAR => MOV BX, DX: VAR
偏移量是VAR,段机值是DS。它表示将数据段中偏移了VAR个字节距离的字单元内容送到寄存器BX中。
例:
MOV AL, DATA+2 => MOV BL, DS: DATA+2
它表示将数据段中偏移了DATA+2个字节单元内容送到寄存器AL中。
用常数表示
例:
MOV AX, DS: [64H]
它表示从当前数据段开始,便宜100个字节的字单元内容送到AX中。不能写为:
MOV AX, 64H
不带方括号的话,就是将64H传送到AX中。