当操作数存放在存储器时,存储单元的物理地址有两部分:段地址和偏移地址.
指令中操作数也可以不在基本规定的段区内,必须在指令中指定段寄存器,即段超越.
存取的约定段及段超越(可修改段),如下所示 :
存取方式 | 默认段 | 偏移地址 | 段超越 | ||
取指令 | CS | IP | - - - - | ||
堆栈操作 | SS | SP | - - - - | ||
源串 | DS | SI | CS,ES,SS | ||
目的串 | ES | DI | - - - - | ||
BP | SS | (EA) | CS,DS,ES | ||
一般数据 | DS | (EA) | CS,ES,SS |
注:EA=Effect Address即有效地址, - - - -表示不可以段超越
基址寄存器: BX , BP
变址寄存器: SI , DI
除基址BX , BP和变址SI , DI这四个寄存器可间接寻址外(即加上中括号[ ]),其它寄存器一律不准间接寻址.
与数据有关的寻址方式:
立即寻址 | MOV AX , 常数 |
直接寻址 | MOV AX , [常数] ;加上中括号 或 MOV AX , 变量名或标号 |
寄存器寻址 | MOV AX , 通用寄存器 |
寄存器间接寻址 | MOV AX , [(BX,BP,SI,DI)中的一个] ;以下四行均需加上中括号 |
寄存器相对寻址 | MOV AX , [(BX,BP,SI,DI)中的一个 + 偏移量] |
基址变址寻址 | MOV AX , [基址寄存器 + 变址寄存器] |
相对基址变址寻址 | MOV AX , [基址寄存器 + 变址寄存器 + 偏移量] |
与转移地址有关的寻址方式(CALL指令也可用下列四种中任何一种寻址):
寻址方式 | 格式 | 转移的有效地址 |
段内直接寻址 | JMP SHORT 标号 | IP=标号, CS值不变 |
段内间接寻址 | JMP WORD PTR 标号[基/变址寄存器] | IP=(EA), CS值不变 |
段间直接寻址 | MP FAR PTR 标号 | IP=标号的偏移地址,CS=标号的段对址 |
段间间接寻址 | JMP DWORD PTR 标号[基/变址寄存器] | IP=(EA) , CS=(EA-2) |