8086汇编寻址方式教程

合集下载

汇编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形成的物理地址指向堆栈段。如左图所示。

第三章 8086的寻址方式

第三章 8086的寻址方式

18
3.1 寻址方式
8086/8088指令寻址方式
存储器寻址方式:操作数在存储器中。通过存储器寻 址找到存储器的物理地址或逻辑地址 。 逻辑地址由段地址和偏移地址两部分构成。 偏移地址亦称有效地址由寻址方式获得。
直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址
微处理器不能直接识别和执行符号指令。所以,汇编语言源程 序要经过翻译,转换成对应的机器语言程序,才能够交计算机执行。 这个翻译的操作称为汇编,由汇编程序完成。
汇编语言和机器语言都是面向机器的低级语言,是计算机的母 语。使用汇编语言编程,可以对计算机的硬件直接进行操控,实现 计算机硬件能够实现的所有功能。
(A.. 指 令 代 码 段
指令执行后:
例3:MOV
AX,3064H
(AX)=3064H
AH 30H AL 64H ... 操作码 64H 30H ... 指 令 代 码 段
指令执行后:
特点:这类指令执行速度快,因 指令取出后 , 其操作数也就被取 出了。 用途:主要用来给寄存器或存储 单元送初值。
22
3.1 寻址方式
直接寻址: 符号地址:
8086/8088指令寻址方式
例3 :AREA1 EQU 0867H ; 等值伪指令EQU给常数0867H定义 一个符号AREA1 MOV AX,AREA1 ;AX=0867H 例4:AREA1 DW 0867H ;DW伪指令用来定义变量,
变量用来表示存储器中的数据。变量名AREA1表示内存 中一个数据区的名字,也就是符号地址,该地址单元存放一个 字数据0867H。 MOV AX,AREA1 ;
20
3.1 寻址方式
直接寻址:

[工学]第三章 8086的寻址方式和指令系统

[工学]第三章 8086的寻址方式和指令系统

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对存储器和io端口的编址方式 -回复

8086对存储器和io端口的编址方式 -回复

8086对存储器和io端口的编址方式-回复8086微处理器是Intel公司于1979年推出的一款16位微处理器,广泛应用于个人电脑和工业控制系统等领域。

在8086中,存储器和I/O端口被分别编址,下面将一步一步回答关于8086对存储器和I/O端口的编址方式的问题。

一、存储器的编址方式:8086微处理器使用20位地址总线,整个寻址空间范围为1MB(2^20)。

这种编址方式称为“段:偏移”地址形式。

1. 段选择器:在8086中,用于选择段的寄存器有CS(Code Segment, 代码段)、DS (Data Segment, 数据段)、SS(Stack Segment, 栈段)和ES(Extra Segment, 附加段)。

这些寄存器的值是16位的,用于存储存储器段的起始地址,偏移地址的计算需要与这些寄存器的值相结合。

2. 偏移地址:8086通过16位的偏移地址来表示存储器中的特定字节。

偏移地址可以是由程序员指定的常数,也可以是由程序中的地址计算得出的。

3. 存储器地址计算:8086微处理器将段选择器的值左移4位(乘以16),加上偏移地址的值。

例如,当使用DS和SI寄存器来指定一个存储器地址时,计算公式为:物理地址= DS * 16 + SI二、I/O端口的编址方式:8086微处理器使用16位地址总线寻址I/O端口。

I/O端口被视为存储器中的特殊地址,可以访问外部设备。

1. I/O端口地址空间:8086将I/O端口地址空间映射到存储器地址空间的一部分,称为I/O端口地址空间。

I/O端口地址空间的范围为0x0000到0xFFFF,共有65536个端口地址。

2. IN指令:IN指令用于从指定的I/O端口读取数据。

它需要提供一个8位或16位的端口地址。

IN指令执行时,8086将相应的端口地址发送给外部设备,然后接收来自该设备的数据。

例如,以下指令从I/O端口0x01 读取数据:IN AL, 0x013. OUT指令:OUT指令用于向指定的I/O端口写入数据。

传送指令的用法及8086的寻址方法

传送指令的用法及8086的寻址方法

传送指令的用法及8086的寻址方法传送指令可以将数据从一个寄存器、内存或端口传送到另一个寄存器、内存或端口。

根据操作数的不同,传送指令可以分为两类:立即传送指令和直接传送指令。

立即传送指令:指令中给出的数据是立即数,直接传送到指定的操作数寄存器、内存或端口。

例如:MOV AX, 1234H;将立即数1234H传送到AX寄存器中。

直接传送指令:指令中给出的是一个地址,指令执行时会将该地址中的数据传送到指定的操作数寄存器、内存或端口。

例如:MOV AX, [BX];将BX寄存器中的偏移地址所指向的字存储单元中的数据传送到AX寄存器中。

8086的寻址方法:8086采用段地址和偏移地址的方式寻址。

在8086CPU中,每个地址由两个部分组成:段地址和偏移地址。

段地址乘以16再加上偏移地址,就是实际的物理地址。

通过将段地址和偏移地址通过两个8位的寄存器组合成16位的地址,来访问任意地址空间。

8086的寻址方式可以分为以下几种:1. 直接寻址:使用一个寄存器或一个立即数来指定一个地址,例如:MOV AX, [BX]。

2. 寄存器间接寻址:使用一个寄存器中存储的地址来访问内存,例如:MOV AX, [SI]。

3. 基址寻址:使用一个基地址加上一个偏移量的方式计算得到一个地址,例如:MOV AX, [BX+SI]。

4. 变址寻址:使用一个变址寄存器中的值来做地址的计算偏移,例如:MOV AX, [DI+1234H]。

5. 相对寻址:使用一个偏移量来计算相对于当前指令地址的距离,例如:JMP SHORT LABEL。

以上这些寻址方式可以对任意的内存地址进行访问,使得8086具有了很好的灵活性和通用性。

(3)8086寻址方式与指令系统

(3)8086寻址方式与指令系统
该指令的目标操作数采用直接寻址方式。操作数存放 在由ES指示的附加段中。 物理地址=ES×10H+1225H。
在汇编语言指令中,可以用符号地址代替数值地 址。 例如: MOV AX,NUMA
此时,NUMA是存放操作数的内存单元的符号地址。
上面这条指令还可以写成如下的形式: MOV AX,[NUMA] 如DATA1数据存放在附加段,则可以用如下的形 式指定段跨越前缀: MOV AX,ES: NUMA或 MOV AX,ES:[ NUMA]
4.2 8086寻址方式
寻址方式:
指令中给出的寻找操作数有效地址的方法。
寻址操作:
计算机按照指令给出的寻址方式求出操作数有效地址 的过程。
808的七种基本的数据寻址方式
(1)立即寻址; (2)寄存器寻址; (3)直接寻址; (4)寄存器间接寻址; (5)寄存器相对寻址; (6)基址变址寻址; (7)相对基址变址寻址。
MOV指令的使用说明
源操作数可以是立即数、寄存器或内存操作数。 目标操作数可以是寄存器或内存操作数。 立即数和CS寄存器只能作为源操作数,不允许作 为目标操作数。 IP和PSW都不可作为源操作数或是目标操作数。 立即数不允许直接传送至DS、ES或SS寄存器。 源操作数和目标操作数不允许同时是内存操作数 ,也不允许同时是段寄存器。 源操作数和目标操作数的类型必须相同,即同为 字节类型或字类型。
控制转移指令
4.3.1数据传送指令
数据传送指令是将数据或地址传送到寄存器、存 储单元或I/O端口中。 分为5类: 通用数据传送指令;


累加器专用传送指令;
地址传送指令;


标志传送指令;
数据类型转换指令。
数据传送指令的共同特点

汇编语言2-1寻址方式

汇编语言2-1寻址方式

EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。

微机原理CH3(1) 8086的寻址方式(ok)

微机原理CH3(1) 8086的寻址方式(ok)

21
第三章
例3-11 MOV AX,[BX][SI](或[BX+SI]) , ( ) 设:DS=3000H,BX=1200H,SI=0500H,(31700H) =ABCDH, , 则:物理地址=31700H。 物理地址 。
×10H 代码段 操作数 操作数
DS BX SI
3000 1200 0500 AH
(2)若:基址寄存器为BP,段址寄存器SS, 则:物理地址=16×SS+BP+SI 或 =16×SS+BP+DI
20
第三章
2、举例 例3-11 =ABCDH, 则:物理地址=31700H。 MOV AX,[BX][SI](或[BX+SI]) 设:DS=3000H,BX=1200H,SI=0500H,(31700H)
第三章
3
3.2 8086的寻址方式
下面以MOV指令的源操作数为例,说明8086的各种寻址方式
一、立即寻址方式(立即数寻址方式)
1、特点 在这种寻址方式下,操作数直接包含在指令中,它是一个 8位或16位的常数,也叫立即数。 2、作用 立即寻址方式指令常用来给寄存器赋初值。 3、举例
4
第三章
例3-1 MOV AL,26H , 该指令表示将一个8位立即数 位立即数26H送到 中。 送到AL中 该指令表示将一个 位立即数 送到
7
第三章
二、寄存器寻址方式 1、特点 在这种寻址方式下,操作数包含在寄存器中,由 指令指定寄存器的名称。 2、常用寄存器 16位操作数:AX、BX、CX、DX、SP、BP、SI、DI等。 8位操作数:AH、AL、BH、BL、CH、CL、DH、DL。
8
第三章
例3-3 MOV DX,AX , 假设该指令执行前AX=3A68H,DX=18C7H,则指 假设该指令执行前 , , 令执行后, 的内容不变。 令执行后,DX=3A68H,而AX的内容不变。 , 的内容不变
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086汇编寻址方式教程
对于汇编语言,寻址方式绝对是最核心的一个部分,但是纷乱复杂的寻址方式又常常让人找不到方向和思路。

所以今天我整理出一份教程,希望对初学者的学习能有所帮助。

一.寻址目的
所谓寻址,就是按照一定的规则寻找操作数。

这个基本概念一定要搞清楚,不要云里雾里记了一大堆都不知道是找什么的。

二.操作数可以存在什么地方?
⑴操作数存在于指令代码中,处理器译码时就立即获得了这个操作数,这就是立即(数)寻址方式。

汇编指令中,这个立即数(操作数)以常量形式出现。

⑵操作数存在于处理器内部寄存器中,处理器从寄存器中获得这个操作数,这就是寄存器寻址方式。

汇编指令中,这个寄存器操作数以寄存器名形式出现。

⑶操作数存在于主存中,处理器从主存单元获得这个操作数,这就是存储器寻址方式。

汇编指令中,这个存储器操作数以主存地址形式出现。

三.逻辑地址。

8086/8088处理器的主存地址在程序设计时采用逻辑地址。

逻辑地址分成段地址和偏移地址两部分。

(这个一定想清楚,寻址在逻辑地址范围内,而不是直接在物理地址上查找。

可以把存储系统看做一个黑匣子,我们程序员只考虑4g的寻址范围,具体怎么映射到物理地址上面,这是OS的任务,我们不必考虑)。

存储器寻址方式表达存储器地址时,段地址在默认的或段超越前缀指令指定的段寄存器中,偏移地址被称为有效地址EA(Effective Address)。

有效地址用中括号括起来。

四.对寻址方式有个整体印象
⑴有效地址直接给出,存在于指令代码中,就是直接寻址方式。

⑵有效地址存在寄存器中,就是通过寄存器的间接寻址方式。

⑶有效地址是两部分的和,一部分在基址(变址)寄存器中,另一部分直接给出(称为位移量),这就是基址(变址)寻址方式。

⑷有效地址是两部分的和,一部分在基址寄存器中(8086是BX和BP),另一部分在变址寄存器中(8086是SI和DI),这就是基址变址寻址方式。

⑸有效地址是三部分的和,第一部分在基址寄存器中(8086是BX 和BP),第二部分在变址寄存器中(8086是SI和DI),第三部分直接给出(称为位移量),这就是相对基址变址寻址方式。

五.寻址方式详细解读(要求:要记住脉络,理解寻址流程,脑子中能有图,最后记住关键点)
1. 立即寻址
立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操
作数字段,不能用于目的操作数字段。

例1 MOV AL,5
2.直接寻址
在IBM PC机中将操作数的偏移地址称为有效地址EA。

在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数.
如操作数在数据段中,则物理地址=16d×(DS)十EA。

1BMPC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段寄存器。

例4 mov AX ,[2000H]
(DS)=3000H,地址32000H中的值为3050H则,执行结果为;(Ax)=3050H
因为实际mov AX中的内容为16d * (Ds) +2000H=32000H
在汇编语言指令中,可以用符号地址代替数值地址,如:
MOV AX,V ALUE
此时V AIUE为存放操作数单元的符号地址。

如写成
MOV AX,[V ALUE]
也是可以的.两者是等效的。

如果V ALUE在附加段中,则应该指定段跨越前缀如下;
MOV AX,ES:V ALUE
或MOV AX,ES:[V ALUE]
直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直接寻址方式,将该变量先取到一个寄存器中,然后在做处理。

IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。

这也是一个常量常常送到寄存器去的原因。

3.寄存器间接址
操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、DI中,而操作数则在存储器中,如下图所示。

a.如果指令中指定的寄存器是BX、SI、DI,则操作数在数据段(DS)中,所以用DS寄存器的内容作为段地址,即操作数的物理地址为:
物理地址=16d×(DS)十(BX)
或物理地址;16 d×(DS)十(SI)
或物理地址=16d×(DS)十(DI)
b.如指令中指定SP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物理地址为:
物理地址=16d×(SS)十(SP)
MOV AX ,[BX]
如果(DS)=2000H ,(BX)=1000H 则
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址里的内容为50A0H则执行结果为:(AX)=50A0H
c.指令中也可指定段跨越前缀来取得其他段中的数据。

如;
MOV AX,ES:[BX]
这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。

4.寄存器相对寻址方式
操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。


| (BX)
EA =| (BP) + 8位或者16位的位移量
| (SI)
| (DI)
同寄存器寻址一样BX BP DI 若没有段跨越前缀物理地址为=16d×(DS) +位移量+*
SP
物理地址为=16d×(SS)十(SP) + 位移量+ *
举个例子:
MOV AX,COUNT[SI] (也可表示为MOv AX,[COUKT十SI]
其中,COUNT 为16位位移量的符号地址。

如果(DS)=3000H,(SI)=2000H COUNT=3000H
则物理地址=30000十2000十3000 =35000H
5.基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。

两个寄存器均由指令指定。

如果基址寄存器为BX,段寄存器使用DS;如基址寄存器为BP 时,段寄存器则用SS。

因此,物理地址为:
= 16D * DS + (BX) + SI(或者DI)
= 16D * SS + (BP) + SI(或者DI)
6.相对基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之
和。

同样,当基址寄存器为BX时,使用DS段寄存器;而当基址寄存器为BP 时,则使用SS为段寄存器。

因此物理地址为:
= 16d * DS + BX + SI + 位移量(8位或16位)
= 16d * ss + BP + SI + 位移量(8位或16位)
刨MOV AX,MASK[BX][SI]
(也可以写成M0V AX,MASK[DX十SI]
或MoV AX.[MASK十BX十SI] )
如(DS)=3000H,(BX)=2000H、(SI)=l000H,MASK=0250H,
则物理地址=16d×(DS)十(BX)十(SI)十MASK
=30000十2000十1000十0250
=33250H
六.区别各种寻址方式时,注意各自的特点。

只有一个常量,是立即(数)寻址方式;
只有一个寄存器名,是寄存器寻址方式;
其他,则是存储器寻址方式。

用中括号括起一个常量,是直接寻址方式;
用中括号括起一个寄存器名,是寄存器间接寻址方式;
用中括号括起一个基址(变址)寄存器名和一个常量,是基址(变址)寻址方式;
用中括号括起两个寄存器名,是基址变址寻址方式;
用中括号括起两个寄存器名和一个常量,是相对基址变址寻址方式。

七. 其他说明
汇编语句中,上面的形式还可以有别的写法,多数很容易就能识别出意思,个别不理解的应进一步参考手册,几个例子如下:
位移量可用符号表示:
MOV AX,[SI+COUNT]
;COUNT是事先定义的变量或常量(就是数值)
MOV AX,[BX+SI+WNUM] ;WNUM是变量或常量
同一寻址方式可以写成不同的形式:
MOV AX,[BX][SI] ;MOV AX,[BX+SI]
MOV AX,COUNT[SI] ;MOV AX,[SI+COUNT]
MOV AX,WNUM[BX][SI]
;等同于MOV AX,WNUM[BX+SI]
;等同于MOV AX,[BX+SI+WNUM。

相关文档
最新文档