目录
1:立即寻址
2:寄存器寻址
3:直接寻址(存储器直接寻址)
4:寄存器间接寻址(重点)
5:基址寻址(相对寻址)
6:变址寻址 (相对寻址)
7:基址加变址寻址 (基址变址相对寻址)
注意:段跨越前缀(段超越前缀)
总结
例题
可执行程序先要加载到内存,再由控制器识别指令
1:立即寻址
从内存拿到CPU控制器之后不需要再一次访问内存。
所以速度快
注意:目标操作数不能为立即数
例如 MOV 5,AL 错误
2:寄存器寻址
从内存拿到CPU控制器之后,也不需要访问内存。所以速度快
3:直接寻址(存储器直接寻址)
从内存拿到CPU控制器之后,还需要在访问内存,所以速度比上面的两种慢
[]里面存的是偏移地址。直接寻址对应的段都是DX
MOV AX,[1000H]
MOV AX,VAR ;这里的VAR是变量名 (在数据段定义的)
也算是直接寻址
4:寄存器间接寻址(重点)
考试爱考对应的寄存器是谁?
寄存器间接寻址就要看[]里面是哪个寄存器。
能够出现在[]里面的寄存器一共有4个BX,BP,SI,DI
BX,SI,DI对应的是DX数据段
BP对应的SS堆栈段
MOV AX,[BX]
先要去看看寄存器BX里面存的是地址,然后在去内存单元去找这个地址。
这里也有个考点,人家问你寄存器间接寻址。要找的操作数在哪里,答案是内存
5:基址寻址(相对寻址)
要有一个位移量,如果没有位移量就变成寄存器寻址了
MOV AX,[BX+5] BX,BP能出现基址寻址的括号中
BX找数据段DS
BP找堆栈段SS
6:变址寻址 (相对寻址)
也要有一个位移量,如果没有位移量就变成寄存器寻址了
MOV AX,[SI+5] 出现在变址寻址中的寄存器只有SI,DI
它们默认的段寄存器都是DS数据段
7:基址加变址寻址 (基址变址相对寻址)
MOV AX,[BX][SI][5]
或者写成MOV AX,[BX+SI+5]
不允许出现 MOV AX,[BX+DI+4] 或者MOV AX,[SI+DI+4] ,只能各选一个
基址寄存器和变址寄存器的位数要相同
注意:段跨越前缀(段超越前缀)
MOV AX,SS:[BX]
就不会默认去找数据段DS了,而是去找堆栈段SS。强制给改了
物理地址就是 SS×16+BX
总结
基址寻址,变址寻址有的教材叫相对寻址要注意
1,2种方式寻址速度快
3-7寻址方式,要找的操作数都在内存中
它们后面跟的地址仅仅都是偏移地址,要想定位物理地址要找段
凡是遇到BP都要去找堆栈段SS
其余的一律去找代码段DS
基址寄存器 BX,BP
编址寄存器 SI,DI
例题
1:8086中BP用作基地址寄存器是,隐含使用的段寄存器是(SS)。
2:MOV AX,[BP][SI]指令,源操作数的寻址方式时(基址加变址寻址)。
3:8086的基址加变址寻址方式,基址寄存器可以是(BX,BP),变址寄存器可以是(SI,DI)。
4:下面四个寄存器中,不能作为间接寻址的寄存器是(B)。
A:BX B:DX C:BP D:DI
5:指令ADD AX,16[BX] 中源操作数的寻址方式()
A 立即寻址 B寄存器寻址 C寄存器相对寻址 D寄存器间接寻址
因为有偏移量
6:寄存器间接寻址中,操作数在()中。
A通用寄存器 B堆栈 C:主存单元 D段寄存器
主存就是内存
7:根据操作数所在位置确定寻址方式,操作数在指令中为(立即)寻址方式,操作数的存储单元地址在指令中,为(直接)寻址方式