8086操作数的寻址方式
8086汇编寻址方式教程

8086汇编寻址方式教程对于汇编语言,寻址方式绝对是最核心的一个部分,但是纷乱复杂的寻址方式又常常让人找不到方向和思路。
所以今天我整理出一份教程,希望对初学者的学习能有所帮助。
一.寻址目的所谓寻址,就是按照一定的规则寻找操作数。
这个基本概念一定要搞清楚,不要云里雾里记了一大堆都不知道是找什么的。
二.操作数可以存在什么地方?⑴操作数存在于指令代码中,处理器译码时就立即获得了这个操作数,这就是立即(数)寻址方式。
汇编指令中,这个立即数(操作数)以常量形式出现。
⑵操作数存在于处理器内部寄存器中,处理器从寄存器中获得这个操作数,这就是寄存器寻址方式。
汇编指令中,这个寄存器操作数以寄存器名形式出现。
⑶操作数存在于主存中,处理器从主存单元获得这个操作数,这就是存储器寻址方式。
汇编指令中,这个存储器操作数以主存地址形式出现。
三.逻辑地址。
8086/8088处理器的主存地址在程序设计时采用逻辑地址。
逻辑地址分成段地址和偏移地址两部分。
(这个一定想清楚,寻址在逻辑地址范围内,而不是直接在物理地址上查找。
可以把存储系统看做一个黑匣子,我们程序员只考虑4g的寻址范围,具体怎么映射到物理地址上面,这是OS的任务,我们不必考虑)。
存储器寻址方式表达存储器地址时,段地址在默认的或段超越前缀指令指定的段寄存器中,偏移地址被称为有效地址EA(Effective Address)。
有效地址用中括号括起来。
四.对寻址方式有个整体印象⑴有效地址直接给出,存在于指令代码中,就是直接寻址方式。
⑵有效地址存在寄存器中,就是通过寄存器的间接寻址方式。
⑶有效地址是两部分的和,一部分在基址(变址)寄存器中,另一部分直接给出(称为位移量),这就是基址(变址)寻址方式。
⑷有效地址是两部分的和,一部分在基址寄存器中(8086是BX和BP),另一部分在变址寄存器中(8086是SI和DI),这就是基址变址寻址方式。
⑸有效地址是三部分的和,第一部分在基址寄存器中(8086是BX 和BP),第二部分在变址寄存器中(8086是SI和DI),第三部分直接给出(称为位移量),这就是相对基址变址寻址方式。
微机原理课件第三章8086寻址方式和指令系统

数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器SS中,操 作放数在的寄物存理器地中址,=即SS寄×存1器6+给BP出。 了要访问的存储单元地址。
DS 3000H ×16
┋
SI 2000H
操作码
+ COUNT 4000H
00
代码段
40
寄存器3相60对00H寻址方式也允许使┋用段超越前缀,
如MOV BX,ES:COUNT[DI]则段地址为ES,物
理地址=ES×16+DI+COUNT。
BH
BL
┋
BX 56
78
36000H
78
56
数据段
┋
指令MOV BX,COUNT[SI]的执行过程
{{ }} 组合起来([B只X能]+相[S加I)]+,D同8或时D还1可6 以加上一个8位或
((1SE86IE8和位A种A种=D的=)I)位也移不[[[[[[[BBB量能BSDBXPPPIIX]],]同]]]]+++但时++++[[[DDDDSDB出8888IIIX现或 或或 或]]]和+++在DDBDDD11P方1188866不66或 或 或括能DDD号111同寄中666时;存出器现相 变在相对 址方对基 寻括寻号址 址址中,
{ 设((D3E86A种S0==0M)300HO0)V[[[[0HBSBD=XIPIB,5]]]]X6或S7,+I8=18H[2S6位0I位0+位0C位H移O,移U量位N量T移] 量COU默 默N认 认T=DS4SS0段 段00H,
微机原理第三章8086的寻址方式和指令系统PPT课件

04 寻址方式和指令系统的关 系
寻址方式对指令执行的影响
01
寻址方式决定了指令操作数的来源和访问方式,从而
影响指令的执行效率和正确性。
02
不同的寻址方式可能导致指令执行时间不同,因为它
们可能需要不同的计算步骤和内存访问次数。
03
寻址方式的正确选择可以简化指令的执行过程,提高
指令的执行效率。
指令系统对寻址方式的支持
在个人电脑(PC)领域,IBM PC/AT是基于8086的扩展版 80286开发的,奠定了现代PC 的基础。
8086也被广泛应用于工业控制、 自动化设备、仪器仪表等领域。
现代计算机系统中8086的继承和发展
尽管随着技术的进步,更先进的微处理器已经取代了8086在主流应用中的地位, 但8086的设计理念和架构仍然在许多嵌入式系统、低功耗应用中得到继承和发展 。
CALL指令用于调用子程序, 并将返回地址压入堆栈。
处理器控制类指令
处理器控制类指令用于控制 处理器的状态和行为。
包括HLT、INT、IRET等指令。
02
01
03
HLT指令用于暂停处理器执 行,等待中断或系统调用。
INT指令用于触发软件中断, 执行中断处理程序。
04
05
IRET指令用于从中断返回, 恢复程序的执行。
算术运算类指令用于执行 加、减、乘、除等算术运 算。
ADD指令将两个操作数 相加并将结果存储在目标 操作数中。
ABCD
包括ADD、SUB、MUL、 DIV等指令。
SUB指令从第一个操作数中 减去第二个操作数,并将结 果存储在目标操作数中。
逻辑运算类指令
逻辑运算类指令用于执行逻 辑与、或、非等逻辑运算。
8086操作数的寻址方式解析

第三章 操作数的寻址方式
一、立即数寻址方式
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(8位或16 位二进制数),也可以是带单引号的字符。 例如:MOV AX,2050H MOV AL,05H 观察下面指令中的错误: MOV AL,‘A’ MOV 05H,AL MOV BL,324D MOV CH,2050H 注意:1.立即数永远不能作目的操作数。 3 2.源操作数和目的操作数要互相匹配。
1
第三章 操作数的寻址方式
1、微机指令格式(补充):操作码 2、说明:
操作码:每条指令必有。
操作数
操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
第三章 操作数的寻址方式
通信工程02班 汤林 1204140218
0
第三章 操作数的寻址方式 操作数是指令的处理对象。在指令中指定操作数或操 作数存放位置的方法称为寻址方式。寻址方式分三类共有7 种寻址方式。 1、操作数在指令中:立即数寻址 2、操作数在寄存器中:寄存器寻址 3、操作数在内存中: ①直接寻址 ②寄存器间接寻址 ③寄存器相对寻址 ④基址变址寻址 ⑤基址变址相对寻址
五、寄存器相对寻址方式
把参与操作数的偏移地址写在寄存器和一个相对位移量 中,而操作数在内存中。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 10 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS)
8086汇编各种寻址方式大全

各种寻址方式1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。
例:MOV AL,50HMOV DS, 1250H 错误2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。
例:MOV AL,BLMOV 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。
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 等。
汇编语言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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
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]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 操作数的寻址方式
二、寄存器寻址方式
参与操作的数据寄存器中。在语句格式中表示为寄存器 名。比如:AL,BX,CX,DS,IP等等。 例1: MOV AX,2050H 目的操作数AX是寄存器寻址方式。 例2: MOV BX,AX 上面指令中的AX和BX都是寄存器寻址方式。
4
第三章 操作数的寻址方式
第三章 操作数的寻址方式
练习3:给定 BX=637DH,SI=2A9BH,偏移量=7237H,试确 定在以下各种寻址方式下的偏移地址是什么? ①直接寻址:_____________ ②使用BX的间接寻址:_____________ ③使用BX的寄存器相对寻址:_____________ ④基址变址寻址:_____________ ⑤基址变址相对寻址: _____________ 答: ①=7237H ②=637DH ③=637DH+7237H ④=637DH+2A9BH ⑤=637DH+2A9BH+7237H
答:偏移地址=0500H+0010H=0510H 物理地址==20000H+0510H=20510H
13
第三章 操作数的寻址方式
七、基址加变址加相对寻址方式
用一个基址寄存器(BX和BP)与一个变址寄存器(DI和SI) 的值相加后,再加一个相对量,将计算结果作为操作数的偏移 地址(根据基址寄存器确定段寄存器:BP对应SS,BX对应DS) 例1: MOV AX,[BX+SI+10H]
16
④MOV AX,[BP]
⑤MOV AX,[BP][SI]
第三章 操作数的寻址方式
例3:假设ARRAY是字数组的首地址,写出将第5个字元素取 出送AX寄存器的指令,要求使用以下几种寻址方式: ①直接寻址 ②寄存器间接寻址 ③寄存器相对寻址 ④基址变址寻址 答案: ① MOV AX, [ARRAY+8] ② MOV SI, ARRAY+8 MOV AX ,[SI] ③ MOV SI,8 MOV AX ,[ARRAY+SI] ④ MOV BX,ARRAY MOV SI ,8 17
③指令执行完后AX为多少? 答案:① 偏移地址= 0500H+0010H=0510H ② 物理地址= 20000H+0510H=20510H ③ 执行完后AX=3412H
18
第三章 操作数的寻址方式
练习
练习1:设(DS)=2000H,(BX)=0100H,(SS)=1000H, (BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。 求下列每条指令源操作数的存储单元地址。 MOV AX,[1234H] MOV AX,[BX] MOV AX,TABLE[BX] MOV AX,[BP] 19 MOV AX,[BP][SI]
五、寄存器相对寻址方式
把参与操作数的偏移地址写在寄存器和一个相对位移量 中,而操作数在内存中。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 10 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS)
第三章 操作数的寻址方式
源操作数的物理地址=DS*16+BX+SI+10H
例2: MOV AX,[BP+DI+35H] 源操作数的物理地址=SS*16+BP+DI+35H 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配。
14
第三章 操作数的寻址方式
习题讲解
例1:指出下列MOV指令的源操作数的寻址方式(TABLE是 一个变量名)(提示:TABLE代表地址) ①MOV AX,1234H ①立即数寻址 ②MOV AX,BX ②寄存器寻址 ③MOV AX,[BX] ③寄存器间接寻址 ④MOV AX,TABLE ④直接寻址 ⑤MOV AX,[1234H] ⑤直接寻址 ⑥MOV AX,[BX+1234H] ⑥寄存器相对寻址 ⑦MOV AX,[BP][SI] ⑦基址变址寻址 ⑧MOV AX,[BX+SI-1234H] ⑧基址变址相对寻址 15
三、直接寻址方式
把参与操作的数据的偏移地址写在指令中,而操作数在 内存中。物理地址的计算需要利用段寄存器(默认为DS)。
DS寄存器 段地址 指令 偏移地址 存储器 操作数
例1: MOV AX,[2050H] 原操作数 [2050H] 是直接寻址方式。
5
第三章 操作数的寻址方式
指令MOV AX,[2050H]的示意图 执行结果 AX=AA55H
1
第三章 操作数的寻址方式
1、微机指令格式(补充):操作码 2、说明:
操作码:每条指令必有。
操作数
操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
例1: MOV [BX+10H],2050H 源操作数的物理地址=DS*16+BX+10H 例2: MOV AX,[BP+15H] 源操作数的物理地址=SS*16+BP+15H 例3:把TABLE是在数据段定义的一个字节数组的首地址标号 (也称变量名),又设:MOV SI,5 则指令:MOV AL,TABLE[SI] 是寄存器相对寻址 指令也可写成:MOV AL,[TABLE+SI] 例4:TABLE是数据段中定义的一个变量,假设它在数据段中的 偏移地址为0100H,有指令:MOV AX,TABLE[SI] ,若 (DS)=2000H,(SI)=00A0H,(201A0H)=12H,(201A1H)=34H,则 物理地址物理地址为多少? 答:物理地址=20000H+0100H+00A0H=20000H+01A0H=201A0H 11
第三章 操作数的寻址方式
六、基址加变址寻址方式
用一个基址寄存器(BX和BP)与一个变址寄存器(DI和SI) 的值相加,计算结果作为操作数的偏移地址。
指令中 基址寄存器 变址寄存器 基址寄存器 基地址 变址寄存器 变地址 段寄存器 段地址 存储器 操作数
偏移地址
注意: ①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配。 ③根据基址寄存器确定段寄存器:BP对应SS,BX对应DS
第三章 操寄存器中,而操作数在内 存中。物理地址的计算需要利用段寄存器。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器只能为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS) 例1: MOV [BX],2050H 目的操作数[BX]是寄存器间接寻址方式。 例2: MOV AX,[BP] 原操作数[BP]是寄存器间接寻址方式。 8
第三章 操作数的寻址方式
观察下面指令中的源操作数的地址计算方法:
例1:MOV AX,[BX] 源操作数的物理地址=DS×16+BX 例2: MOV AL,[BX] 源操作数的物理地址= DS×16+BX 例3: MOV AX,[SI] 源操作数的物理地址= DS×16+SI 例4: MOV AX,[DI] 源操作数的物理地址= DS×16+DI 例5: MOV AX,[BP] 源操作数的物理地址= SS×16+BP 例6: MOV AX,ES:[BX]
12
第三章 操作数的寻址方式
例1:写出下面指令中的源操作数的物理地址计算方法 1、MOV AX,[BX+SI] 或者 MOV AX,[SI+BX] 答:源操作数的物理地址=DS*16+BX+SI 2、MOV AX,[BP+DI] 或者 MOV AX,[BP][DI] 答:源操作数的物理地址=SS*16+BP+DI 例2: MOV AX,[BX] [SI] 或写为: MOV AX,[BX+SI], 若(DS)=2000H,(BX)=0500H,(SI)=0010H,则偏移地址为多 少?物理地址为多少?
第三章 操作数的寻址方式
例4:指令MOV AX,[BX] [SI] ( 或写为MOV AX,[BX+SI] ) 若(DS)=2000H,(BX)=0500H,(SI)=0010H, (2050FH)=00H,(20510H)=12H,(20511H)=34H, (20512H)=56H。则: ①偏移地址为多少? ②物理地址为多少?
第三章 操作数的寻址方式
例2:假设TABLE的物理地址为2000AH,(DS)=2000H, (BX)=0100H,(SS)=1000H, (BP)=0010H, (SI)=0002H,
求下列每条指令源操作数的存储单元地址。
①MOV AX,[1234H] ②MOV AX,[BX] ③MOV AX,TABLE[BX] 答: ① 21234H ② 20100H ③ 4010AH ④ 10010H ⑤ 10012H
9
第三章 操作数的寻址方式
例6:已知指令 MOV AX,[BX]。如果(DS)=3000H,(BX)=1010H, (31010H)=12H,(31011H)=24H,则操作数的物理地址为多少? 指令执行完后AX为多少? 答:物理地址=30000H+1010H=31010H,执行完后,(AX)=2412H
20
第三章 操作数的寻址方式
练习4:已知DS=2000H,BX=0100H,SI=0002H,存储 单元 [20100H] ~[20103H]依次存放12H、 34H、 56H、 78H,[21200H] ~[21203H]依次存放2AH、 4CH、 B7H、 65H,说明下列每条指令执行后AX寄存器的内容。 答: ① 1200H ①MOV AX,1200H ② 0100H ②MOV AX,BX ③ ③MOV AX,[1200H] ④ ④MOV AX,[BX] ⑤ ⑤MOV AX,[BX+1100H] ⑥ 21 ⑥MOV AX,[BX+SI] ⑦