关于8086寻址方式

请问8086有多少种寻址方式?
都是什么形式的?举个例子~~

1. 寻址方式概念
寻址方式 是指在指令中用以说明操作数所在地址(位置)的方法。
段超越 不是按照系统的约定,而是在指令中指定某一段寄存器作为存储器操作数的段地址。
[注]8086/8086指令系统对存储单元的访问,其段地址都是从系统事先约定好的段寄存器中获取,若不遵循系统的约定,则要制定段寄存器,即段超越。
2. 与操作数有关的寻址方式

(1)立即寻址方式:操作数含在指令代码中,由指令直接给出。
例如:MOV AL,50
   MOV BX,1000H

(2)寄存器寻址方式:指令中指定某个寄存器的内容作为操作数。
例如:MOV AL,BL
   ADD AL,5
   MOV DATA,AL
(3)直接寻址方式:指令中直接给出操作数的地址(偏移地址)。
例如:MOV AL,[100H]
   MOV BX,ES:[100H]
   MOV DATA,-1
   MOV BYTE PTR[1000H],0
(4)寄存器间接寻址方式:指令中指定某个寄存器(SI、DI、BX、BP)中的一个内容作为操作数的地址(偏移地址)。
例如:MOV AX,[BX]
   MOV [BP],AL
   MOV DS:[BP],AX
   MOV WORD PTR[SI],-1
(5)寄存器相对寻址方式:指令中指定某寄存器内容与一个位移量相加作为操作数的地址(偏移地址)。
例如:MOV AX,[SI+2]
   MOV [BP-6H],AL
   ADD BYTE PTR[BX+10H],5
   MOV BX,DATA[SI]
   MOV DATA[BP],0
(6)基址变址寻址方式:指令中,指定一变址寄存器内容与基址寄存器内容相加作为操作数的地址。
例如:MOV AL,[BX+SI]
   MOV [DI+BX],DX
   ADD [BP+SI],AL
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-01
是指CPU在执行指令时寻找操作数或操作数地址的方式。

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

例:MOV AL,50H

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

例:MOV AL,BL

以下寻址方式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提供段地址

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

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

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

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

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

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

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

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

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

(5)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址寄存器(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]

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

(6)串寻址:用于数据串操作指令,它隐含地运用:SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);约定源串段地址在DS中,目的串段地址在ES中。不允许段超越。

例:MOVSB ;ES:[DI] ←DS:[SI],SI←SI 1,DI←DI 1

MOVSW ;ES:[DI] ←DS:[SI],SI←SI 2,DI←DI 2

(7)端口寻址:操作数在外设端口中。

直接端口寻址:指令中直接给出的8位常数是外设端口地址。

例:IN AL,34H ;AL←[34H]

OUT 34H,AL ;[34H]←AL

间接端口寻址:指令中外设端口的16位地址在DX中。

例:MOV DX,280H

IN AL,DX ;AL←[280H]

OUT DX,AL ;[280H]←AL

(8)隐含寻址:指令中没有给出操作数,但却隐含在固定对象中。

例:AAA ;隐含对AL操作,
第2个回答  2013-09-01
以 MOV 指令为例

1. 立即寻址方式* —— 操作数在指令中给出
MOV AL, 5
MOV AX, 3064H
* 只能用于SRC字段 ? MOV 5, AL
* SRC 和 DST的字长一致 ? MOV AH, 3064H

2. 寄存器寻址方式* —— 操作数在指定的寄存器中
MOV AX, BX
MOV AL, BH

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

3. 直接寻址方式* —— 有效地址EA由指令直接给出
有效地址EA:操作数的偏移地址
物理地址PA = 16d ? (DS) + EA
例:MOV AX, [2000H]
EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H

例:操作数地址可由变量(符号地址)表示
MOV AH, VALUE ( VALUE DB 10 )

* 隐含的段为数据段 DS

* 可使用段跨越前缀 MOV AX, ES :[2000H]

* 使用变量时,要注意变量的属性

VALUE DB 10

MOV AX, VALUE ;错误

MOV AL, VALUE

MOV AX, WORD PTR VALUE

* 适于处理单个变量

4. 寄存器间接寻址方式

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

BX, SI, DI ->(DS)

物理地址 = 16d * (DS) + (BX)

物理地址 = 16d * (DS) + (SI)

物理地址 = 16d * (DS) + (DI)

BP ->(SS)

物理地址 = 16d * (SS) + (BP)

MOV AX, [BX]

PA = 16d *(DS) + (BX)

MOV ES:[BX] , AX

PA = 16d *(ES) + (BX)

MOV DX, [BP]

PA = 16d *(SS) + (BP)

寄存器间接寻址方式*

* 不允许使用AX、CX、DX存放EA

MOV AX, [CX];错误

* SRC 和 DST的字长一致

MOV DL, [SI] ; [BX]指示一个字节单元

MOV DX, [DI] ; [BX]指示一个字单元

* 适于对数组、字符串、表格中的数据连续处理

5. 寄存器相对寻址方式*

有效地址 = (BX) + 8位或者16或位移量

有效地址 = (BP) + 8位或者16或位移量

有效地址 = (SI) + 8位或者16或位移量

有效地址 = (DI) + 8位或者16或位移量

例: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI]

假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H

假设(35000H)=1234H, 那么 (AX)=1234H

* 适于数组、字符串、表格的处理

6. 基址变址寻址方式*

有效地址 = (BX) + (SI)

有效地址 = (BX) + (DI)

有效地址 = (BP) + (SI)

有效地址 = (BP) + (DI)

MOV AX, [BX][DI]

PA=(DS)×16d+(BX)+(DI)

或 MOV AX, [BP+DI]

PA=(SS)×16d+(BX)+(DI)

MOV AX, ES:[BX][SI]

PA=(ES)×16d+(BX)+(SI)

* 适于数组、字符串、表格的处理

* 必须是一个基址寄存器和一个变址寄存器的组合

MOV AX, [BX][BP] ;错误

MOV AX, [SI][DI] ;错误

7. 相对基址变址寻址方式*

有效地址 = (BX) + (SI) + 8位或者16或位移量

有效地址 = (BX) + (DI) + 8位或者16或位移量

有效地址 = (BP) + (SI) + 8位或者16或位移量

有效地址 = (BP) + (DI) + 8位或者16或位移量

MOV AX, MASK[BX][SI]

或 MOV AX, MASK[BX+SI]

或 MOV AX, [MASK+BX+SI]

* 适于堆栈处理和数组处理
第3个回答  推荐于2017-11-26
8086一共有7种寻址方式~~

1立即寻址

就是 指令中的操作数在操作码的后面
例如

MOV AL,09H

2寄存器寻址

指令的操作数存放在寄存器里

例如

MOV AX,BX

3直接寻址

例如

MOV AL,[0005]

3寄存器间接寻址

MOV AL,[BX]

4相对基址寻址

MOV AL,[BX]+1 或是MOV AL,[BX+1]在或是 MOV AL,1[BX]

5相对变址寻址

MOV AL,[DI]+1.....

6基址变址寻址

MOV AL,[BX]+[DI]+1

.....本回答被网友采纳
第4个回答  2013-09-01
寻址方式共7种

立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址共七种

8086指令系统的寻址方式有哪些???
2.寄存器寻址方式 功能:直接把寄存器里的内容送进寄存器;操作数在寄存器中,指令指定寄存器号;这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度;格式:mov ax,bx 3.存储器寻址方式:形成操作数逻辑地址的偏移量;以下各种寻址方式的操作数都在除代码段以...

寻址方式与基本指令
1. 立即寻址方式 例如:MOV AX, 1234H ; 给AX寄存器赋值为1234H 2. 寄存器寻址方式 例如:MOV SI, AX 3. 直接寻址方式 例如:MOV ES:[5678H], BL ; 指定ES作为段寄存器 4. 寄存器间接寻址方式 例如:MOV AX, [SI] ; 自动引用DS作为段寄存器 5. 寄存器相对寻址方式 在一般情况下,如果SI...

关于8086寻址方式
2. 与操作数有关的寻址方式 (1)立即寻址方式:操作数含在指令代码中,由指令直接给出。例如:MOV AL,50 MOV BX,1000H (2)寄存器寻址方式:指令中指定某个寄存器的内容作为操作数。例如:MOV AL,BL ADD AL,5 MOV DATA,AL (3)直接寻址方式:指令中直接给出操作数的地址(偏移地址)。例如...

8086\/8088指令系统中,源操作数有几种寻地址方式
1. 在8086\/8088指令系统中,源操作数有七种寻址方式:1. 立即数寻址方式:操作数直接嵌入指令中,如 `mov ax, 41h`。这种方式不执行总线周期,因此执行速度快。2. 寄存器寻址方式:使用寄存器的内容作为操作数,如 `mov ax, cx`。由于操作数在CPU内部,因此也不需要执行总线周期。3. 直接寻址方式...

8086有哪几种寻址方式,每种举一个例子,具体点
以下寻址方式的举例都只对源操作数而言:1、直接寻址:MOV AX,X ;2、寄存器间接寻址:MOV AX,[BX];3、寄存器相对寻址:MOV AX,[BX+2];MOV AX,ARRAY[BX];4、基址变址寻址: MOV AX,[BX+SI];5、相对基址变址寻址:MOV AX,[BX+SI+2];注意:第四、五中寻址方式只能从(BX、BP)、(...

寻址方式与用于寻址的寄存器小结(8086)
在8086\/8088处理器中,内存寻址方式多样化,包括直接寻址、寄存器间接寻址、寄存器相对寻址、基址间址寻址和相对基址间址寻址。每种方式都有其独特的特点和应用场景。首先,直接寻址以立即数形式给出地址,方便定位,但不具备动态地址变换能力。比如,汇编指令 MOV AX, [3],其中的内存地址3是直接嵌入在...

寻址的寻址方式简介
8086指令系统提供了以下5种针对存储器的寻址方式。直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址和相对基址加变址寻址。用于说明操作数所在存储单元的地址。由于总线接口单元BIU能根据需要自动引用段寄存器得到段值,所以这五种方式也就是确定存放操作数的存储单元有效地址EA的方法。有效地址EA是一...

8086指令系统的寻址方式有哪些???
1. 立即寻址方式* —— 操作数在指令中给出 MOV AL, 5 MOV AX, 3064H 只能用于SRC字段 ? MOV 5, AL SRC 和 DST的字长一致 ? MOV AH, 3064H 2. 寄存器寻址方式* —— 操作数在指定的寄存器中 MOV AX, BX MOV AL, BH 字节寄存器只有 AH AL BH BL CH CL DH DL SRC 和 DST的字长...

8086\/8088存储器的物理地址是如何形成的?
8086寻址采用“段:偏移”的方式(如SS:BP),段地址寄存器和偏移地址寄存器都是16位长的,实际的线性地址是20位,由“(段 << 4) + 偏移”得到。32位CPU一般寻址空间也是32位线,直接产生32位的线性地址(不考虑描述符、分页等机制),因此不存在上述现象。另外,相关地,80286后就有了实模式与保护...

什么是寻址方式?8086\/8088指令系统的寻址方式有哪些?
8086或8088指令的寻址方式 :计算机对存储器,寄存器中数据的各种操作需要数据的存放地址,然后进行操作。指令的寻址方式就是寻找指令操作数所在地址的方式,对于我们来说,可以确定数据的来源和去处 1.立即数寻址方式 例:mov ax,41h;(这个就是立即数)操作数就是41h 立即数寻址不执行总线周期...

相似回答