8086汇编各种寻址方式大全
汇编8086寻址方式

寄存器相对寻址方式也可以使用段跨越前缀。
例如:MOV AX, ES:[DI+10]
这种寻址方式同样可用于表格处理。
表格的首地址可设置为位移量,修改基址或变址寄存器的内容取得表格中的值。
例 MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI])
这种寻址方式通常用于对二维数组的寻址。
例如,存储器中存放着由多个记录组成的文件,则位移量可指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素。
这种寻址方式也为堆栈处理提供了方便。
一般(BP)可指向栈顶,从栈顶到数组的首址可用位移量表示,变址寄存器可用来访问数组中的某个元素。
1060:0013 0207 NEXT: ADD AL,[BX]
CPU在执行JMP指令时,IP指向了下一条指令,其值为000F,JMP SHORT NEXT指令的机器语言为EB04,EB为操作码,04为位移量,所以转向的有效地址应为:
000F + 0004 = 0013
1 段内直接寻址(Intrasegment direct addressing)
这种寻址方式在指令中直接指出转向地址,如:
ห้องสมุดไป่ตู้
JMP SHORT NEXT
JMP NEAR PTR AGAIN
其中,NEXT和AGAIN均为转向的符号地址。在机器指令中,操作码之后给出的是相对于当前IP值的位移量(转移距离),所以,转向的有效地址是当前IP值与指令中给出的位移量(8位或16位)之和。
5 基址变址寻址方式(Based indexed addressing)
这是一种基址加变址来定位操作数地址的方式,也就是说,操作数的有效地址是一个基址寄存器(BP或BX)和一个变址寄存器(SI或DI)的内容之和。如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。如左图所示。
第3章 8086寻址方式和指令系统

30
31
加法指令(Addition)
ADD 加法指令
ADD 目的,源;目的←源+目的 ADC 目的,源;目的←源+目的+CF,用于多字节加法
ADC带进位的加法指令
目的操作数只能是寄存器和存储单元 源操作数可以是寄存器、存储器或立即数 注意:源和目的操作数不能同时为存储器,必须都是字节或字
AX
(21A00H)=26BFH
16
存储器寻址
5
17
8086指令系统
数据传送指令 算术运算指令 逻辑运算
18
19
数据传送指令
通用数据传送指令
输入输出指令
MOV PUSH
目的,源 源
IN AL,端口地址
OUT 端口Biblioteka 址,ALIN AX,端口地址
IN AL,DX IN AX,DX
CX
12H 34H
操作码 34H 12H CS段 高地址
注意:立即数只能作源操作数,不能作目的操作数; 以A~F开头的数字出现在指令中需在前加0
5
寄存器寻址(Register Addressing)
操作数包含在指令中指定的8位或16位寄存器中 寄存器:AX,BX,CX,DX,SI,DI,SP,BP
物理地址=16×DS+BX+SI(DI)+位移量 物理地址=16×SS+BP+SI(DI)+位移量
15
基址寄存器为BP时,段寄存器为SS
相对基址变址寻址 (Relative Based Indexed Addressing)
8086对存储器和io端口的编址方式

8086是intel公司推出的一款16位微处理器,它采用了20位位置区域总线,能够寻址1MB的内存空间。
在8086中,存储器和I/O端口的编址方式对于系统的设计和应用具有重要意义。
本文将围绕8086对存储器和I/O端口的编址方式展开深入探讨。
一、存储器的编址方式1. 实位置区域模式8086微处理器最初工作在实位置区域模式下,通过物理位置区域直接对存储器进行寻址。
在实位置区域模式下,8086可以访问的存储器空间为1MB,位置区域空间范围为0xxxx~0xFFFFF。
2. 分段位置区域模式为了克服实位置区域模式下1MB内存的局限性,8086引入了分段位置区域模式。
在分段位置区域模式下,8086通过段基址寄存器和偏移位置区域的组合来访问存储器,可以实现对更大容量的存储器进行访问。
3. 段基址寄存器在分段位置区域模式下,8086中的段基址寄存器包括CS(代码段寄存器)、DS(数据段寄存器)、ES(额外段寄存器)和SS(堆栈段寄存器),它们分别用来存放代码段、数据段、额外段和堆栈段的基址。
4. 偏移位置区域8086微处理器中,偏移位置区域用来表示段内的相对位置区域,它的范围为0~xxx。
5. 分段位置区域的形式在8086中,物理位置区域的计算方式为:物理位置区域=段基址×16+偏移位置区域。
通过这样的方式,8086可以实现对1MB范围内的存储器进行寻址。
二、 I/O端口的编址方式1. 端口编址方式8086微处理器通过端口编址方式来对I/O设备进行访问,I/O端口的位置区域空间范围为0~xxx。
2. IN指令和OUT指令8086微处理器提供了IN指令和OUT指令用于进行I/O端口的读写操作。
IN指令用于从指定端口读取数据,OUT指令用于向指定端口写入数据。
3. I/O端口位置区域的分配在8086系统中,I/O端口位置区域的分配由外围设备的制造商进行规划,保证不同的外围设备具有不同的端口位置区域,从而避免了位置区域冲突。
[工学]第三章 8086的寻址方式和指令系统
![[工学]第三章 8086的寻址方式和指令系统](https://img.taocdn.com/s3/m/1834505401f69e314332945c.png)
19
3.2
8086指令系统的概况
3.2.1 指令格式 说明:① 指令系统规定一条指令只能包含1个或2个
操作数。涉及一个操作数的指令称为单操作数指令; 单操作数指令中的操作数可能由指令本身提供,也可 能用指令隐含指出。涉及2个操作数的称为双操作数 指令;双操作数指令中至少有1个操作数必须通过寄 存器指出,不允许2个操作数均在存储器中。
操作数就在 CPU 的内部寄存器 (AX、BX、CX、DX、DI、 SI、BP、SP)中,寄存器名由指令指出。 例: DEC BL ;将BL的内容减1 MOV DX,AX ;将AX中的值送入DX中 ROL AH,1 ;将AH中的内容循环左移一位 说明:①采用此寻址方式的指令在执行时,操作数就在 CPU 内部进行,不需要使用总线周期,指令执行速度快。 ②一条指令中可以对源操作数、也可对目的操作数、 还可两者都采用寄存器寻址方式。 7
3. 双操作数指令:
例:MOV
AX,[BX+2000H]
25
指令编码格式举例:
26
3.2.2 指令的执行时间
指令周期:是指计算机完成对一条指令从取指开始至 执行完毕所需要的时间叫指令周期。与时 钟周期长短和所需要的时钟数有关。 即包括:
一条指令基本执行时间加上计算有效地址所需要的时间。 计算有效地址所需要的时间由寻址方式决定。
0
OP
例如:HLT指令编码为:
7
0
11110100
F4H
22
2. 单操作数指令:
单操作数在寄存器中
格式一:
7
格式二:
000—AX 001—CX 010—DX 011—BX 100—SP 101—BP 110—SI 111—DI
8086的寻址方式

8086 的寻址方式摘要: 指令的一般格式:操作码操作数……操作数计算机中的指令由操作码字段和操作数字段组成。
操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的过程中...计算机中的指令由操作码字段和操作数字段组成。
操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的过程中所需要的操作数。
该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。
8086 的基本寻址方式有六种。
1.立即寻址所提供的操作数直接包含在指令中。
它紧跟在操作码的后面,与操作码一起放在代码段区域中。
如图所示。
例如:MOV AX,3000H立即数可以是8 位的,也可以是16 位的。
若是16 位的,则存储时低位在前,高位在后。
立即寻址主要用来给寄存器或存储器赋初值。
2.直接寻址操作数地址的16 位偏移量直接包含在指令中。
它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS 加上这16 位地址偏移量。
如下图所示。
例如:MOV AX,DS:[2000H];(对DS 来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB 的范围内寻找操作数。
8086 中允许段超越,即允许操作数在以代码段、堆栈段或附加段为基准的区域中。
此时只要在指令中指明是段超越的,则16 位地址偏移量可以与CS 或SS 或ES 相加,作为操作数的地址。
MOV AX,[2000H] ;数据段MOV BX,ES:[3000H] ;段超越,操作数在附加段即绝对地址=(ES)*16+3000H3.寄存器寻址操作数包含在CPU 的内部寄存器中,如寄存器AX、BX、CX、DX 等。
8086指令格式和寻址方式

物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
寻找存储器操作数,必须经过总线控制逻辑电 路进行存取。当EU单元需要读/写位于存储器的操作 数时: ①根据寻址方式(指令中的B2字节),由EU计算 出操作数的偏移量,即有效地址EA; ②将EA送至BIU单元,同时请求BIU执行一个 总线周期; ③BIU将某个段寄存器的内容左移4位,在加上 EU送来的EA,形成20位的实际地址,即物理地址 PA; ④执行总线周期,读/写指令所需要的操作数。 计算EA的通式为:
第4章 80x86指令系统
由此可见,操作数可分为源操作数和目的操作
数。 源操作数:只能读取的操作数。 目的操作数:即可读取又可写入(存放操作结 果)的操作数。
操作数又可分为两大类:数据操作数和地址操 作数。
第4章 80x86指令系统
指令长度与字长的关系
指令的长度主要取决于指令操作码的长度、操作 数的长度和操作数的个数。通常指令字长位数越多, 所能表示的操作信息也就越多,指令功能就越丰富。 但位数多则指令所占的存储空间就多,读取指令的时 间就增加。 字长(一般是指CPU的机器字长)是指CUP一次能 够处理的二进制数位数,它都是字节长度(8位二进制 数)的1、2、4或8倍,也就是8、16、32或64位。因此, 指令字长也是字节的简单倍数,如一字节指令,二字 节指令、三字节指令……。
000000DW mod reg 000 r/m 001 Disp-L Disp-H
000000 1 1
0000 0011
10
00100110
0010 0110
00001000
0000 1000
1000 0001
03H
汇编语言-寻址方式

在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。
例如:如果(DS)=2100H ,(BX)=0158H,(DI)=10A5H MOV AX, [BX][DI] 假设该字存储单元的内容如下,则(AX)=1234H
下面两种表示方法是等价的: MOV AX , [BX + DI] MOV AX , [DI][BX] 下面指令中,目的操作数采用基址加变址寻址,引用的段寄存 器是DS。 MOV DS :[BP + SI] , AL 下面指令中,源操作数采用基址加变址寻址,引用的段寄存器 ES。 MOV AX , ES :[BX + SI] 这种寻址方式适用于处理数据或表格。用基址寄存器存放数组 首地址,而用变址寄存器来定位数组中的各元素。或反之。 由于两个寄存器都可改变,所以能更加灵活地访问数组或表格 中的元素。
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
请熟悉下面的写作形式: MOV BX , [BP-4] 源操作数间接相对寻址,引用的段寄存器是SS。 MOV ES : [BX + 5] , AL 目的操作数采用寄存器相对寻址,引用的段寄存器是ES。 指令MOV AX , [SI + 3]与MOV AX , 3[SI]是等价的。
【微机原理】3.1-8086寻址方式

3.1.6 基址变址寻址方式
Based Indexed Addressing
• 有效地址是一个基址寄存器(BX或BP)和一个变址寄 存器(SI或DI)的内容之和,两个寄存器均由指令指 定。
• 若基址寄存器为BX时,段址寄存器用DS,则: 物理地址 = 16×DS+BX+SI 或 = 16×DS+BX+DI
§3.1 8086的寻址方式
3.1.1 立即寻址方式 3.1.2 寄存器寻址方式 3.1.3 直接寻址方式 3.1.4 寄存器间接寻址方式 3.1.5 寄存器相对寻址方式 3.1.6 基址变址寻址方式 3.1.7 相对基址变址寻址方式 3.1.8 其它寻址方式
3.1.4 寄存器间接寻址方式
Register Indirect Addressing
• 这种情况下,也允许用段超越前缀将SS修改为CS、DS或ES中的一个, 计算物理地址时,应将上式中的SS改为相应的段寄存器。
• 其余情况均隐含使用DS提供基地址,它们的物理地址计算方法: 物理地址=16×DS+EA
相对基址变址寻址
• 这类操作数可以有以下几种形式:
― [DISP]
;EA=DISP
立即寻址
• 立即数可以送到寄存器中,还可送到一个存储单元 (8位)中或两个连续的存储单元(16位)中去。 • 立即数只能作源操作数,不能作目的操作数。
• 以A~F打头的16进制数字出现在指令中时,前面一 定要加一个数字0。 例如,将FF00H送到AX的指令必须写成:
MOV AX,0FF00H
§3.1 8086的寻址方式
• 寻址方式就是指令中说明操作数所在地址的方法。
• 指令有单操作数、双操作数和无操作数之分。如 果是双操作数,要用逗号分开,左边的为源操作 数,右边的为目的操作数。
8086 微机 寻址方式

;(AH)=20H,(AL)=04H ;(BL)=5AH ;(EAX)=22334455H, (AX)=4455H
立即数常用于给寄存器赋初值,只能作源操作数,不能作 目的操作数
2 寄存器寻址
** **
出栈方向
高地址
POP BX 执行前
高地址
POP BX 执行后
(BX) = 2107H
注意:进栈和出栈的指令顺序!顺序不同,结果不同! 例: PUSH AX
PUSH BX … … POP BX POP AX
例: PUSH AX
例:
PUSH [BX+DI]
5 寄存器相对寻址
操作数的有效地址是一个基址寄存器或变址寄存器中存放的数据加上 指令给出的8位或16位偏移量,其物理地址为:
(DS)×16+(SI/DI/BX)+8位或16位偏移量 或 (SS)×16+(BP)+8位或16 位偏移量 例3-7 假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H, COUNT=10H,(23620H)=8A76H,(31110H)=4567H MOV AX ,[SI+20H] MOV BX ,[BP+COUNT]
MOV [2000H], DS 则 PA=22000H
二义性/定义不明
[22000H]=00H
[22001H]=20H
例: MOV AX, DATA_SEG MOV DS, AX 例: MOV AL, ‘E’ 或 MOV AL, 45H 例: MOV BX, OFFSET TABLE 例: MOV AX, Y[BP][SI]
汇编语言基础--8086汇编指令

微处理器指令系统概述:一台计算机所能识别和执行的全部指令,称为该机器的指令系统,又称指令集。
一般指令分为:“告诉计算机干什么”的指令操作助记符,“指令操作对象”即操作数。
寻址方式概述:指定操作数或操作数存放位置的方法称为寻址方式。
8086的寻址方式有三类:立即寻址、寄存器寻址和存储器寻址;其中存储器寻址又分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址五种。
立即寻址:操作数直接写在指令中的寻址方式,因为这种操作数称为立即数,所以这种寻址方式也称为立即数寻址方式。
立即数可以使8位;16位;32位;例如:MOV AX,6789H ADD AX,1234H寄存器寻址:指令所要的操作数事先已存储在某寄存器中,或把目标操作数存入寄存器中,或者源操作数和目标操作数都是寄存器。
例如:MOV AX,BX MOV AX,6789H(源操作数是立即数寻址,目的操作数是寄存器寻址)存储器寻址:在存储器中查找操作数。
1·直接寻址方式:指令所要的操作数存放在内存中,在指令中直接给出操作数的段地址和有效地址,从而使8086的BIU部件能够利用地址加法器得到实际物理地址。
例如:MOV AX,DS:[2000H](mov 默认DS为存放数据的段,所以这个指令等价于MOV AX,[2000H])MOV AX,ES:[2000H]2·寄存器间接寻址方式:操作数在存储器中,操作数的有效地址用SI,DI,BX,BP 4个集训期之一来指定。
若不使用段前缀,则规定若有效地址用SI,DI,BX等之一来指定,则默认的段寄存器是DS,若有效地址用BP来指定,则其默认的段寄存器位SS。
例如:MOV BX,[DI]3·寄存器相对寻址方式:操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI、DI)的内容和指令中的8/16位偏移量之和。
例如:MOV BX,[SI+100H]4·基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和。
8086-8088 CPU的寻址方式

MOV AX,ES:[VALUE]
微机原理
1.3 寄存器寻址方式 寄存器寻址:操作数存放在CPU内部的寄存器中 例 :MOV AX,DX ; AX←DX 1.4 寄存器间接寻址 寄存器间接寻址:有效地址包含在基址寄存器 BX、BP或变址寄存器SI、DI中直接寻址 例 MOV AX,[BX]
MOV AX,[BP] 1.5 寄存器相对寻址 寄存器相对寻址方式:有效地址在SI、DI、BX 或BP之一,加上指令中8位或16位相对地址 例 MOV AL,ADDR[SI]
微机原理
1.6 转移类指令的寻址方式 1.段内相对转移寻址 有效地址EA为当前IP寄存器内容与指令中指定 的8位或16位有符号数之和 例:JZ DISP 其中DISP是符号地址 2.段内间接转移寻址 有效地址EA为寄存器或存储器单元的内容,这 种寻址方式不能用于条件转移指令。 例:JMP CX
微机原理
微机原理
1.6 基址变址寻址方式 操作数的有效地址等于一个基址寄存器的内容 和一个变址寄存器的内容之和 基址寄存器:BX、BP 变址寄存器:SI 、DI
MOV AX,[BX] [DI] 也可写成 MOV AX,[BX+DI] 1.7 相对基址变址寻址方式 操作数的有效地址等于一个基址寄存器的内容、 一个变址寄存器的内容和一个8位或16位的位移 量之和。 MOV AX,ADDR[BP+SI]
8086CPU中的寻址方式一

8086CPU中的寻址⽅式⼀寻址⽅式定义寻址⽅式:求操作数所在地或者所在存储器地址单元的⽅式。
指令中的操作数,⼤多数都在存储器单元当中,也可以在寄存器⾥⾯,也可以是在指令中⽴即给出的常数。
我们都把求得她们的⽅式归属于寻址⽅式。
类型寻址⽅式按求得的操作数的⽬的不同,可以分为两类:1. 数据⽤2. 程序要实现转移的地址⽤如果要实现段内转移,就需要求得段内偏移地址给IP⽤,如果要实现段间转移,除了偏移地址外,还需要求得⽬的地的段地址给CS⽤。
要计算的数据的所在存储地址怎么得到,或者转移的地址内容的所在存储地址怎么得到,就需要⽤以⼀种寻址⽅式去求得。
关于数据的寻址⽅式1.⽴即数寻址要寻找的操作数在指令中⽴即给出,直接以常数给出。
如mov AX,1234HAX是⽬的操作数,1234H是源操作数,对于源操作数⽽⾔,采⽤的就是⽴即数寻址。
指令中要传送给AX的数据在哪⾥呢?指令中⽴即给出了。
这就叫⽴即数寻址。
要搞清楚8086⽴即寻址,就需要了解谁和谁之间可以传送从图中可知,在8086当中,⽴即数只能作为源操作数。
⽴即数传送数据时要类型明确。
mov [0002H],15H中括号⾥⾯表⽰的是地址,这条语句是把⽴即数15H送到地址为0002H的存储器单元中。
但是我们只知道地址是多少,不知道存储器单元的存储类型是什么?语法错误。
类型不明确。
这中问题只要源操作数和⽬标操作数有⼀⽅明确,双⽅均能明确(不⼀致另说)。
双⽅不明确,类型不明确。
改mov WORD PTR [0002H],15H如果要传送数据给段寄存器,不能直接⽴即数传送,要按箭头⾛。
从图中也可以看出,段寄存器CS单独划分出来,因为⽤户⽆法改变CS的内容,和IP寄存器⼀样,开机的内容由操作系统完成。
执⾏期间是由CPU完成转移指令改变。
CS和IP不能做⽬标操作数,但是可以做源操作数。
2.寄存器寻址指要寻找的操作数在某寄存器当中。
如mov AX,BX对于源操作数⽽⾔,要操作的数据在BX寄存器中,这就是寄存器寻址。
8086寄存器和7种寻址方式

8086寄存器和7种寻址⽅式1. 8086处理器有以下寄存器:类别位数名称通⽤16AX, BX, CX, DX8AH,AL,BH,BL,CH,CL,DH,DL指针16SP(stack pointer,堆栈指针),BP(base pointer,基址指针)索引(变址)16SI(source index,源索引),DI(destination,⽬的索引)段16CS(code segment,代码段),DS(data segment,数据段),SS(stack segment,堆栈段),ES(extra segment,附加段)指令16IP(instruction pointer,指令指针/指令计数器)标志16FR(flag register,标志寄存器)其中:1). 段寄存器CS,DS,SS,ES分别保存端代码段,数据段,堆栈段,辅助数据段的起始地址,段寄存器只能由其他寄存器载⼊值,不能由主存直接载⼊.2). 基址寄存器BX,SP,BP⽤于保存相对段⾸地址的偏移地址,其中BX的默认段寄存器是DS,⽽SP,BP的默认段寄存器是SS.3). 索引寄存器(⼜叫变址寄存器)SI,DI,既可⽤于存放存储单元在段内的偏移量,⼜可⽤于存放在相对于段内偏移量的偏移量(详见下⽂寻址⽅式).4). 操作数相对于段⾸的偏移地址⼜称有效地址.(参考⾃《x86 PC 汇编语⾔,设计和接⼝》)1). ⽴即数寻址⽅式操作数作为指令的⼀部分,紧跟在操作码之后,该寻址⽅式执⾏得很快.将信息装载到除了段寄存器和标志寄存器以外的寄存器:MOV AX,2550H ;将2550H装⼊AXMOV CX,625;将⼗进制数625装⼊CXMOV BL,40H ;将40H装⼊BLView Code要将信息移到段寄存器,必须现将数据装载到通⽤寄存器,再移到段寄存器:MOV AX,2550HMOV DS,AX ;正确MOV DS,2550H ;错误View Code2). 寄存器寻址⽅式操作数在寄存器中,指令指定寄存器号.16位操作数的寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP等;8位操作数的寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH等.寄存器寻址⽅式和⽴即数寻址⽅式不涉及内存访问,因⽽可以取得较⾼的运算速度.如:MOV BX,DX ;将DX的内容复制到BXMOV ES,AX ;将AX中的内容复制到ESADD AL,BH ;将BH中的内容加到ALView Code3). 直接寻址⽅式操作数在内存,但操作数的有效地址作为指令的⼀部分,紧跟在操作码之后.默认段寄存器为DS().如:MOV DL,[2400] ;将DS:2400H的内容移到DLMOV [3518],AL ;将AL的内容移到DS:3518HView Code4). 寄存器间接寻址⽅式操作数在内存,但操作数的有效地址由SI,DI,BX,BP指定,其中SI,DI,BX默认的段寄存器是DS,BP默认的段是SS.如:MOV CL,[SI] ;将DS:SI中的内容移到CLMOV [DI],AH ;将AH的内容移到DS:DIView Code5).寄存器相对寻址⽅式操作数的有效地址是⼀个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和.如:MOV CX,[BX]+10;[BX]+10也可以写作[BX+10]或10[BX]MOV AL,[BP]+5MOV DX.[SI]+5View Code6). 基址变址寻址⽅式操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容之和,默认段寄存器为基址寄存器的默认段寄存器.如:MOV CL,[BX][DI] ;将DS:BX+DI的内容移到CL7). 相对基址变址寻址⽅式(Relative based indexed addressing)操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容和8位或16位位移量之和,这种寻址⽅式为像数组元素遍历等堆栈处理提供了⽅便.如:MOV CL,[BX][DI]+8;将DS:BX+DI+8的内容移到CL,[BX][DI]+8也可以写作[BX+DI+8]MOV CH,[BX][SI]+20View Code。
8086寻址方式及举例

8086寻址方式及举例8086寻址方式指的是在Intel 8086处理器中进行内存访问的方式。
8086寻址方式主要有以下几种:1. 直接寻址(Direct addressing):给出地址直接访问内存中的数据。
2. 寄存器寻址(Register addressing):使用寄存器中存放的地址进行内存访问。
3. 寄存器间接寻址(Register indirect addressing):使用寄存器中存放的地址作为内存地址的间接寻址方式。
4. 寄存器相对寻址(Register relative addressing):使用一个寄存器中存放的地址作为起始点,加上一个常数作为偏移量。
5. 基址加变址寻址(Base + index addressing):使用基址寄存器和变址寄存器相加得到内存地址。
6. 相对基址加变址寻址(Base + index + offset addressing):使用基址寄存器、变址寄存器和一个常数作为偏移量相加得到内存地址。
举例:1. 直接寻址: MOV AX, [1000H] 表示将内存地址为1000H的数据复制到AX寄存器中。
2. 寄存器寻址: MOV AX, BX 表示将BX寄存器中的数据复制到AX寄存器中。
3. 寄存器间接寻址: MOV AX, [BX] 表示将内存地址为BX寄存器中的数据所指向的内存单元中的数据复制到AX寄存器中。
4. 寄存器相对寻址: MOV AX, [BX+2] 表示将内存地址为BX寄存器中的数据加上2所得到的地址中的数据复制到AX寄存器中。
5. 基址加变址寻址: MOV AX, [BX+SI] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址中的数据复制到AX寄存器中。
6. 相对基址加变址寻址: MOV AX, [BX+SI+2] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址再加上2所得到的地址中的数据复制到AX寄存器中。
8086七种寻址方式

8086/8088七种寻址方式(一)8086/8088寄存器组(二)8086/8088寻址方式(1)立即寻址方式操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。
这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。
例如指令:MOV AX,1234H的存储和执行情况如下图:图中指令存放在代码段中,OP表示该指令的操作码部分再例如:MOV AL,5 则指令执行行,(AL)=05HMOV BX,3064H 则指令执行后,(BX)=3064H(2)寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP,和BP等:对于8位数,寄存器可以是:AL,AH,BL,BH,CL,CH,DL,DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。
例如:MOV AX,BX如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变例如:MOV SI,AXMOV AL,DH(3)直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。
操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
如下图所示:在汇编语言指令中,可以用符叼地址代替数值地址。
如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是相等的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE或MOV AX,ES:[VALUE]直接寻址方式常用于处理单个存储器变量的情况。
它可实现在64K字节的段内寻找操作数。
直接寻址的操作数通常是程序使用的变量。
8086汇编语言指令的寻址方式有哪几类

1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?寄存器寻址最快7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。
XCHG CS , AX ;不能修改CSMOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送XCHG BX , IP ;不能用名字直接访问IPPUSH CSPOP CS ;不允许直接修改CS值IN BX , DX ;输入数据必须使用累加器AL或AXMOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000MOV CS , [1000];不允许直接修改CS值20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少?利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么?栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址)B P75. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H,(31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H,(32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容:(1) MOV AX,BX (2) MOV AX,[BX](3) MOV AX,4200H (4) MOV AX,[2800H](5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI]9. 分别执行下列各指令组,写出AX的内容:(1) MOV AX,93A4HNEG AX73A4-8c5c,e689-1977(AX)=6C5CH(2) XY DW "AB"MOV AX,XY(AX)=4142H(3) MOV AX,2B7EHMOV CX,4DB5HADD AX,CX(AX)=7933H(4) XA DW 0BD57HMOV AX,0FBCDHAND AX,XA(AX)=B945H(5) STCMOV BX, 0B69FHMOV AX, 43A2HSBB AX, BX(6) MOV AX, 3537HMOV BL, 39HADD AL, BLAAA(AX)=3606H(7)XY DB "AB"MOV AX, WORD PTR XY(AX)=4241H10. 找出下列指令中所有对的指令,写出题号,错误的请说明原因。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)
=(264E5H)
= 2450H
2、段内间接寻址
这种寻址方式在指令中用数据寻址方式(除立即寻址方式外)间接地指出转向地址,如:
JMP BX
JMP NEAR PTR [BX]
JMP TABLE[SI]
注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。
3、段间直接寻址
段间直接寻址和段内直接寻址类似,指令中直接给出转向地址,不同的是,在符号地址之前要加上表示段间远转移的操作符FAR PTR。
指令格式如下:
JMP FAR PTR OUTSEG
因为是段间转移,CS和IP都要更新,这个新的段地址和偏移地址由指令操作码之后的连续两个字提供,所以只要将指令中提供的转向偏移地址装入IP,转向段地址装入CS,就完成了从一个段到另一个段转移的工作。
4、段间间接寻址
这种寻址方式仍然是用相继两个字的内容装入IP和CS来达到段间的转移目的的,但这两个字的存储器地址是通过指令中的数据寻址方式(除立即寻址方式和寄存器寻址方式外)来取得的
为了说明寻址两个字单元,指令中必须加上双字操作符DWORD。
指令格式如下:
JMP DWORD PTR [SI]
JMP DWORD PTR[TABLE+BX]。