分为数据寻址方式和程序寻址方式
数据寻址方式有9种,这里介绍7种
程序寻址方式有4种,这里介绍4种
数据寻址方式
数据寻址方式就是寻找参加运算的操作数的方式,80x86指令中所需的操作数来自三个方面
- 立即数
- 寄存器操作数
- 储存器操作数
有效地址EA由段基址和偏移地址(偏移量)组成,段基址由寄存器提供,而偏移地址由以下四个基础部分组成
- 基址,基址寄存器为BX和BP
- 变址,变址寄存器位SI和DI
- 比例因子,1、2、4、8等,8086系统中的比例因子为1
- 位移量 DS和SS段寄存器,通常用来存放要访问数据的段地址(EA,有效地址,偏移地址)
有效地址=基址+变址*比例因子+位移量
题目中,有效地址=DS*10H+DI/SI
- 数据寻址方式
- 立即寻址
- 寄存器寻址
- 储存器寻址
- 直接寻址
- 寄存器间接寻址
- 相对寄存器寻址
- 基址、变址寻址
- 相对的基址、变址寻址
- 立即寻址
MOV AX,5H AX<-5H
速度快
- 寄存器寻址
MOV AX,BX
对于16位的操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP
对于8位的操作数,寄存器可以是AH,AL,BH,BL等
执行过程中不用访问储存器,执行速度很快
- 直接寻址
MOV AX,[2000H]
【】内的地址为偏移地址也称有效地址(EA),该有效地址与指令的操作码一起存放在
DS寄存器中
假设DS=3000H
则EA=3000H*10H+2000H=32000H
- 寄存器间接寻址
MOV AX,[SI] EA=DS*10H+SI
MOV [BP],DX EA=SS*10H+BP
在以BX、SI、DI进行寄存器间接寻址时,隐含的数据段寄存器位DS
在以BP、SP进行寄存器间接寻址时,隐含的数据段寄存器位SS
无论用那个寄存器都允许超越
MOV AX,ES:[BX] EA=ES*10H+BX
- 相对寄存器寻址
MOV AX,3003H[SI]
假设DS=3000H,SI=2000H,指令中的3003H几位位移量DISP。
指令操作的物理地址=3000H+2000H+3003H=35003H
类似的有
在以BX、SI、DI进行寄存器间接寻址时,隐含的数据段寄存器位DS
在以BP、SP进行寄存器间接寻址时,隐含的数据段寄存器位SS
- 基址、变址寻址
EA=基址寄存器的内容+变址寄存器的内容
MOV AX,[BX][SI]
假设BX=1500H,SI=2000H,DS=8000H
物理地址=DS*10H+EA=8000H+1500H+2000H=83500H
- 相对的基址、变址寻址
EA=基址寄存器的内容+变址寄存器的内容+16位或8位位移
MOV AX,MASK[BX][SI]
假设MASK=64H,BX=A500H,SI=2200H,DS=6000H
物理地址=DS*10H+EA=6000H*10H+A500H+2200H+64H=6C764H
-
程序寻址方式
- 直接寻址方式
- 段内间接寻址方式
- 段间直接寻址方式
- 段间间接寻址方式