指令就是计算机完成某种操作的命令。
- 机器指令的格式
每条机器指令都由”0“和”1“组成,包含操作码和地址码。操作码:说明指令的性质和功能;地址码:说明参与运算的操作数或操作数的地址。
8086 CPU寻址方式(重点)
程序员决定应该怎么描述操作数,对于CPU来说,根据程序员在指令中对操作数的描述,如何找到该操作数,即寻址方式。
那么微机中哪些地方可以存放操作数呢?请看下图中的标红部分:
寻址方式有:
-
包含在指令中
一、立即寻址 -
存放在CPU的某个寄存器中
二、寄存器寻址 -
存放在内存储器中
三、存储器寻址
-
存放在lO接口电路的端口中
四、I/O 端口寻址
一、立即寻址
特点:操作数直接存放在指令中,紧跟在操作码之后。
表示方法:立即数,也就是常量,二进制数、八进制数、十进制数、十六进制数均可。
再看一个例子:
二、寄存器寻址
特点:操作数在CPU内部的某个寄存器中。
表示方法:寄存器的名称(如AX、BX等)
三、存储器寻址
特点:操作数存放在内存单元中。
指令中是如何描述操作数呢?
在指令中用逻辑地址表示操作数(段地址:有效地址),有效地址EA 可由以下三部分组成:
- 基址寄存器(BX、BP)
- 变址寄存器内容(SI、DI)
- 位移量(8位或16位立即数)
CPU如何找到操作数?
物理地址和逻辑地址的转换
物理地址PA=段地址×16+偏移地址(EA)
1,直接寻址
有效地址EA由指令直接给出
表示方法: [有效地址EA]
物理地址:PA= (DS) × 16 +EA
MOV AX,[2000]
EA=2000H,假设(DS)=3000H,那么(PA)=32000H
2,寄存器间接寻址
有效地址EA由某个寄存器给出
表示方法:[BX]、[SI]、[DI]、[BP]
MOV AX,[BX]
(DS)=2000H,(SS)=1000H,(BP)=120H
(BX)=100H,(AX)=1234H,(20100H)=5678H
EA=(BX)=100H
PA=(DS)× 16+(BX)=20100H
3,基址寻址
表示方法:[基址寄存器+位移量]
物理地址:
PA=(DS) x16+(BX)
PA=(SS) ×16+(BP)
MOV AX,[BX+3] ;源操作数在数据段
MoV AX,3[BX]
Mov [BP],DI ;目的操作数在堆栈段
4,变址寻址
表示方法:[变址寄存器+位移量]
物理地址:
PA=(DS) ×16+(SI)或(DI)
MOV Ax,[Sl+1000H] ;源操作数在数据段
MoV[DI+200H],CL ;目的操作数在数据段
5、基址变址位移寻址
表示方法:[基址寄存器+变址寄存器+位移量]
物理地址:
PA=(DS)x16+(BX)+(变址寄存器)+位移量
PA=(SS) x16+(BP)+(变址寄存器)÷位移量
MoV AX,[BX+DI+80H];源操作数在数据段
Mov cx, [BP+S+1200H] ;源操作数在堆栈段
6,基址变址寻址
表示方法:[基址寄存器+变址寄存器]
MOV CX,[BP+SI] ;源操作数在堆栈段
注意:必须是一个基址寄存器和一个变址寄存器的组合。