指令中如何提供操作数地址或操作数的方法成为寻址方式。规定如何对地址字段做出解释以找到所需的操作数。
操作数可能在 1 指令中 2 寄存器 3 存储器(堆栈, IO接口中)。 在存储器中时,指令中的地址不能直接访问主存,必须对其作一定运算后才能得到存放操作数的贮存单元地址。
每一种计算机的指令系统都有自己的一套寻址方式,不同计算机的寻址方式的分类和名称并不统一,但大多数可以归结为以下几种方式:
立即寻址--------操作数在指令中。eg mov ax,1234 原操作数寻址方式为 立即寻址,目的操作数为 寄存器寻址
直接寻址--------指令中地址码是操作数所在的主存单元地址。 eg (1)mov ax,ds:[100h] 原操作数寻址方式为 直接寻址 (2) data segment varx db 10h ..................... data ends ................ coseg segment .......... mov al,varx 原操作数寻址方式为 直接寻址
寄存器寻址--------指令中地址码是寄存器,寄存器中是操作数。 eg mov bx,ax 源和目的操作数都是 寄存器寻址
间接寻址---------指令中地址码是存放操作数地址的主存单元地址。 象 c 语言中的指针。
变址寻址--------指令中指定一个寄存器作为变址寄存器,并在指令地址码部分给出一个形式地址,变址寄存器的内容(变质值)与形式地址相加为操作数的有效地址。 s 操作数 = ( ( r 变址寄存器 ) + d 形式地址 )
还有其他寻址方式,不一一说明,他们是 寄存器间接寻址, 基址寻址, 相对寻址, 页面寻址, 堆栈寻址。
下面是8086(内外16位)/8088(内16位,外8位)寻址方式介绍
1 寄存器寻址
2 立即寻址
存储器操作寻址方式
3 直接寻址
4 寄存器间接寻址---------操作数有效地址ea在 si, di, bx, (ds) bp (ss)
5 变址寻址----操作数有效地址ea是 si, di, bx, bp 的内容和指令中给出的位移量之和
6 基址变址寻址----操作数有效地址ea是bx(ds), bp(ss) 的内容,指令中给出的位移量, si, di,3个地址分量 之和
7 串操作寻址