指令与指令系统
指令:
- 控制计算机完成某种操作的命令。
指令系统:
- 处理器所能识别的所有指令的集合。
指令的兼容性:
- 同一系列机的指令都是兼容的。
汇编语言:
- 指令助记符。
指令格式
例如:
寻址方式
操作数可能的来源或存放处:
- 由指令直接给出
- 存放于寄存器中的寻址方式
- 内存单元 或 I/O 端口
寻找操作数所在地址的方法可以三大类:
- 立即寻址
- 寄存器寻址
- 存放于存储器或 I/O端口中的寻址方式
1.立即数寻址
- 立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。
2.寄存器寻址
- 参加运算的数存放在CPU的通用寄存器中,可以是8位或16位。
3.直接寻址(存储器操作数寻址)
- 参加运算的数存放在存储器的某一个或某两个单元中,操作数是8位或16位数据。
- 表现形式:[ ],[ ] 中的内容是操作数在内存中的偏移地址。
- 存储器操作数的字长本身不确定,其字长取决于指令中另一个寄存器操作数,或通过其他方式指定字长。
指令的操作数出现 [ ],表示要寻址的数在内存中。
内存地址是由段地址和偏移地址组成的,在直接寻址中,默认的操作数所在的段是数据段,即操作数的物理地址是由数据段的段地址和指令中给出的偏移地址组成的。
例:MOV AX, [1200H],AX位宽是16位,要读取1200H和1201H两个字节的内存单元。
也可以明确指出操作数所在的段:例:MOV AX, ES:[1200H]
4.寄存器间接寻址(寄存器操作数寻址)
- 操作数的偏移地址存放在寄存器内,以寄存器的形式出现在指令中。
- 存放偏移量的间址寄存器只有4个:BX,BP,SI,DI。
注意:
- 当使用 BX,SI,DI时,操作数默认在数据段中。
- 当使用 BP 时,操作数默认在堆栈段中。
5.寄存器相对寻址(存储器操作数寻址)
- 操作数的偏移地址为寄存器的内容加上一个偏移量。
相对寻址主要用于一维数组的操作:
常将位移量作为“表头”地址,间址寄存器中的值作为表内相对寻址。
6.基址寻址
可以用作寄存器间接寻址的 4 个寄存器中 BX,BP,SI,DI 中,BX 基址寄存器(Base Register)、BP 基数指针(Base Pointer),SI 源变址指针(Source Index)、DI 目的变址指针(Destination Index)称为变址寄存器。
- 操作数的偏移地址由基址寄存器 BX 或 BP 加上一个偏移量共同给出。
注意, 以下几种写法是完全等同的
MOV AX, 10H[BX]
MOV AX, [BX]10H
MOV AX, [BX + 10H]
MOV AX, [BX] + 10H
7.变址寻址
- 操作数的偏移地址由变址寄存器 SI 或 DI 加上一个偏移量共同给出。
例:MOV AX, [SI+03H]
操作数默认在数据段中,可以段超越:例:MOV AX, ES:[SI+03H]
8.基址+变址寻址
- 操作数在内存中,其偏移地址是由基址寄存器 (BX 或 BP) 加上变址寄存器 (SI 或 DI) 再加上一个位移量共同组成的。
例如:
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式 | 指令操作数形式 |
---|---|
寄存器间接 | 只有一个寄存器(BX/BP/SI/DI之一) |
寄存器相对 | 一个寄存器加上位移量 |
基址—变址 | 两个不同类别的寄存器 |
相对基址-变址 | 两个不同类别的寄存器加上位移量 |