指令执行后,(AX)=3064H
不能直接给段寄存器和标志寄存器赋予立即数。如:MOVDS,1250H 是错误的。
3.1.1.2寄存器寻址方式(Registeraddressing)
它使用寄存器来存放要处理的操作数,寄存器号由指令指定。
如:MOV AX,BX
源寄存器和目的寄存器的位数必须一致。如:MOVCL,BX 是错误指令。
有效地址 EA(EffectiveAddress)的概念:在 8086 里,把操作数的偏移地址称为有效地址。
3.1.1.3直接寻址方式(Directaddressing)
操作数存放在存储单元中,而这个存储单元的有效地址就在指令的操作码之后,操作数的物理地址可通过
((DS)×16)再加上这个有效地址形成。
在汇编语言指令中,可以用符号地址(变量名或标号)代替数值地址。
例如:MOVAX,DATA
或MOVAX,[DATA]
这里 DATA 是存放操作数单元的符号地址。
直接寻址方式默认操作数在数据段中,如果操作数定义在其它段中,则应在指令中指定段跨越前缀。
例如:MOVAX,ES:NUMBER
或MOVAX,ES:[NUMBER]
这里 NUMBER 是附加段中的字变量。
3.1.1.4寄存器间接寻址方式(Registerindirectaddressing)
这种寻址方式通过基址寄存器 BX、BP 或变址寄存器 SI、DI 来保存操作数的有效地址。如果指令中使用的寄存器
是 SI、DI 和 BX,则操作数在数据段中,((DS)×16)再加上存器中的有效地址形成 20 位物理地址;如果指令中使用
的寄存器是 BP,则操作数在堆栈段中,((SS)×16)再加上 BP 中的有效地址形成 20 位物理地址。
指令中也可以指定段跨越前缀来取得其他段中的数据。
例如:MOVAX,ES:[BX]
3.1.1.5寄存器相对寻址方式(Registerrelativeaddressing)
这种寻址方式通过基址寄存器 BX、BP 或变址寄存器 SI、DI 与一个位移量相加形成有效地址,计算物理地址的缺
省段仍然是 SI、DI 和 BX 为 DS,BP 为 SS。
如:MOVAX,COUNT[SI](也可表示为 MOVAX,[COUNT+SI]),其中 COUNT 为 16 位位移量的符号地址。
3.1.1.6基址变址寻址方式(Basedindexedaddressing)
操作数的有效地址是一个基址寄存器(BP 或 BX)和一个变址寄存器(SI 或 DI)的内容之和。如基址寄存器为 BX
时,与 DS 形成的物理地址指向数据段;如基址寄存器为 BP 时,与 SS 形成的物理地址指向堆栈段。
3.1.1.7相对基址变址寻址方式(Relativebasedindexedaddressing)
基址加变址再加上一个位移量形成操作数的有效地址。缺省段的使用仍然是 DS 与 BX 组合,SS 与 BP 组合。这种
寻址方式通常用于对二维数组的寻址。如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址
寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。
如:MOVAX,MASK[BX][SI](或MOVAX,MASK[BX+SI],或MOVAX,[MASK+BX+SI])
有效地址可以由以下三种成分组成:
·位移量(Displacement)是存放在指令中的一个 8 位或 16 位数,但它不是立即数,而是一个地址。
·基址(Base)是存放在基址寄存器(BX 或 BP)中的内容。它是有效地址中的基址部分,通常用来指向数据段
中数组或字符串的首地址。
·变址(Index)是存放在变址寄存器(SI 或 DI)中的内容。它通常用来访问数组中的某个元素或字符串中的某个
字符。
有效地址的计算可用下式表示:
EA=基址+变址+位移量
这三种成分都可正可负,以保证指针移动的灵活性。它们任意组合使用,可得到不同的寻址方式。
3.1.2与转移地址有关的寻址方式
顺序执行的指令地址是由指令指针寄存器 IP 自动增量形成的,而程序转移的地址必须由转移类指令和 CALL 指令指
出,这类指令表示转向地址的寻址方式包括:段内直接寻址、段内间接寻址、段间直接寻址、段间间接寻址。
因为 CS:IP 寄存器总是指向下一条将要执行的指令的首地址(称为 IP 当前值),当转移指令执行后,必须修改 IP
或 CS、IP 的值。当转移指令给出位移量时,用 IP 当前值加上位移量即为新的 IP 的值。