8086汇编各种寻址方式大全

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

各种寻址方式

1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。

例:MOV AL,50H

MOV DS, 1250H 错误

2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。

例:MOV AL,BL

MOV CL, BX 错误

以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储

器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存

储器操作数,如BUF DB 10H,20H。

3. 存储器寻址

(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。

例:MOV AL,[1000H] 约定由DS提供段地址

MOV AL,CS:[1000H] ;段超越,由CS提供段地址

MOV AL,SS:[1000H] ;段超越,由SS提供段地址

例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000

(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。

例:MOV AX,[SI] ;AX←DS:[SI]

MOV [BX],AX ;DS:[BX]←AX

例:MOV AX, [BX]

如果(DS)= 2000H, (BX)= 1000H,

则物理地址 = 20000H + 1000H = 21000H

(3)寄存器相对寻址

这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。

例:MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI])

其中COUNT为16位位移量的符号地址。

如果(DS)= 3000H,(SI)= 2000H,COUNT = 3000H

则物理地址 = 30000H + 2000H + 3000H = 35000H

(4)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。

例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH]

MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX

(5)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS 中,允许段超越。

例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX

MOV BX,SS:[DI+45H] ;BX←SS:[DI+45H]

(6)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。

例:MOV BX,[DI+BP+45H] ;BX←SS:[DI+BP+45H]

MOV AX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H]

例:MOV AX, [BX][DI] (或写为 MOV AX, [BX+DI])

如 (DS ) = 2100H,(BX)= 0158H,(DI)= 10A5H

则 EA = 0158H +10A5H = 11FDH

物理地址 = 21000H +11FDH = 221FDH

注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。(7)相对基址变址寻址

这种寻址方式与基址变址寻址方式类似,不同的是基址加变址再加上一个位移量形成操作数的有效地址。缺省段的使用仍然是DS与BX组合,SS与BP组合

例:MOV AX, MASK[BX][SI]

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

如(DS)= 3000H,(BX)= 2000H,(SI)= 1000H,MASK = 0250H,

则物理地址 = 30000H + 2000H + 1000H + 0250H = 33250H

二、与转移地址有关的寻址方式

前面介绍的与数据有关的寻址方式最终确定的是一个数据的地址,而这里介绍的与转移地址有关的寻址方式最终确定一条指令的地址

三种表示转移距离的操作符:

SHORT转移,称为短转移,位移量用一个字节(8位)来表示。

NEAR转移,称为近转移,位移量用16位表示,因为程序控制仍然在当前代码段,所以只修改IP的值,CS 的值不变。

FAR转移,称为远转移,因为程序控制超出了当前代码段,所以CS和IP都必须修改为新的值。

1、段内直接寻址

这种寻址方式在指令中直接指出转向地址,如:

JMP SHORT NEXT

JMP NEAR PTR AGAIN

其中,NEXT和AGAIN均为转向的符号地址。在机器指令中,操作码之后给出的是相对于当前IP值的位移量(转移距离),所以,转向的有效地址是当前IP值与指令中给出的位移量(8位或16位)之和注意:这种寻址方式适用于条件转移及无条件转移指令,当用于条件转移指令时,位移量只允许8位。

假设:(DS)= 2000H,(BX)= 1256H,(SI)= 528FH,

位移量 = 20A1H,(232F7H)= 3280H,(264E5H)= 2450H。

JMP BX

则执行该指令后(IP)= 1256H

JMP [BX][SI]

则指令执行后(IP)=(16d ×(DS)+(BX)+(SI))

=(20000H + 1256H + 528FH)

相关文档
最新文档