30331寻址方式

8086的寻址方式

1.与数据有关的寻址方式

以 MOV 指令为例

                          立即寻址   MOV AX , 3069H  
    寄存器寻址   MOV AL , BH  

存储器寻址

  直接寻址   MOV AX , [ 2000H ]  
寄存器间接寻址   MOV AX , [ BX ]   
寄存器相对寻址   MOV AX , COUNT [ SI ]   
基址变址寻址   MOV AX , [ BP ] [ DI ]  
相对基址变址寻址   MOV AX , MASK [ BX ] [ SI ]  
1.1立即寻址方式*

—— 操作数在指令中给出

指令格式:

MOV AL, 5
MOV AX, 3064H
MOV AL, ‘A’

* 只能用于 SRC 字段      MOV 40H, AL    //F

* SRC 和 DST 的字长一致    MOV AH, 3064H    //F

 

1.2寄存器寻址方式*

— 操作数在指定的寄存器中

MOV AX, BX
MOV AL, BH
MOV AX, 3064H

* 字节寄存器只有 AH AL BH BL CH CL DH DL
* SRC 和 DST 的字长一致 MOV AH, BX    //F
* CS 不能用 MOV 指令改变 MOV CS, AX   //F

 

 

 操作数的偏移地址:有效地址EA(effective address)

*有效地址计算

  EA = 基址 + (变址*比例因子)+ 位移量

    16位寻址   32位寻址  
位移量   0,8,16位   0,8,32位  
基址寄存器   BX,BP   任何32位通用寄存器包括ESP  
变址寄存器   SI,DI   任何32位通用寄存器除ESP  
比例因子     1,2,4,8  

不允许跨段前缀:

串处理指令的目的串必须用ES段

PUSH和POP指令的源必须用SS段

指令必须放在CS段

物理地址:PA

 

1.3直接寻址方式*

— 有效地址EA由指令直接给出

例:MOV AX, [ 2000H ]
EA=2000H, 假设(DS)=3000H, 那么PA=32000H

30331寻址方式

* 隐含的段为数据段 DS
* 可使用段跨越前缀 MOV AX, ES: [2000H]

* 操作数地址可由变量(符号地址)表示, 但要注意变量的属性

VALUE DB 10
MOV AH, VALUE
MOV AX, VALUE //F
MOV AX, WORD PTR VALUE //T

 

1.4寄存器间接寻址*

— EA 在基址寄存器(BX/BP)或变址寄存器(SI/DI) 中

MOV AX, [BX] PA = 16d × (DS) + (BX)
MOV AX, ES:[BX] PA = 16d × (ES) + (BX)
MOV AX, [BP] PA = 16d × (SS) + (BP)

* 不允许使用AX、CX、DX 存放 EA
MOV AX, [CX]   //F
* SRC 和 DST 的字长一致
MOV DL, [ BX ] ; [BX]指示一个字节单元
MOV DX, [ BX ] ; [BX]指示一个字单元
* 适于数组、字符串、表格的处理

 

1.5寄存器相对寻址方式*

 

30331寻址方式

指令格式: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI]
假设 (DS)=3000H, (SI)=2000H, COUNT=3000H,
则: PA = 35000H
假设(35000H)=1234H, 那么 (AX)=1234H
* 适于数组、字符串、表格的处理

 

1.6基址变址寻址方式*

 

30331寻址方式

指令格式:

MOV AX, [BX] [DI]
MOV AX, [BX+DI]
MOV AX, ES:[BX] [SI]

* 适于数组、字符串、表格的处理
* 必须是一个基址寄存器和一个变址寄存器的组合
MOV AX, [BX] [BP]  //F
MOV AX, [SI] [DI] //F

 

1.7相对基址变址寻址方式

 

30331寻址方式

MOV AX, MASK [BX] [SI]
或 MOV AX, MASK [BX+SI]
或 MOV AX, [MASK+BX+SI]

 

1.8段寄存器的使用规定

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxwyw.html