8086操作数的寻址方式

合集下载

8086汇编寻址方式教程

8086汇编寻址方式教程

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

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

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

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

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

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

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

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

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

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

三.逻辑地址。

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

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

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

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

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

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

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

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

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

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

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

微机原理课件第三章8086寻址方式和指令系统

微机原理课件第三章8086寻址方式和指令系统
2取 单.如操元果作的指数 地令寄, 址中存钥 。用器匙对寄就于间存或相寄接器=当存D寻B于器SP址×进存间1方行储接6+式间D接I的寻E址A计,寄则算存默器 认操作
数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器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课件

微机原理第三章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操作数的寻址方式解析

8086操作数的寻址方式解析
2
第三章 操作数的寻址方式
一、立即数寻址方式
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(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汇编各种寻址方式大全

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 的寻址方式摘要: 指令的一般格式:操作码操作数……操作数计算机中的指令由操作码字段和操作数字段组成。

操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。

操作数:指在指令执行操作的过程中...计算机中的指令由操作码字段和操作数字段组成。

操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。

操作数:指在指令执行操作的过程中所需要的操作数。

该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。

寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。

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寻址方式

汇编语言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 微机 寻址方式

8086 微机  寻址方式
例3-1 MOV AX,2004H MOV BL, 5AH MOV EAX,22334455H
;(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-8088 CPU的寻址方式

8086-8088 CPU的寻址方式
3. 段间直接转移寻址 指令直接提供了转移目标段地址和偏移地址 例:JMP FAR PTR NEXT NEXT是符号地址,它所在的段地址送CS寄存 器,所在的偏移地址送IP寄存器 4.段间间接转移寻址 用存储器中二个连续字内容取代IP和CS寄存器 中的原始内容以达到段间转移的目的 例3.12:JMP DWORD PTR [BP][SI]
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]

第三章 8086的寻址方式

第三章 8086的寻址方式
7
8086/8088指令概述
操作数的一般形式: 3、存储器操作数:这类操作数是指定存储单元 的内容或该单元的地址.
例1:MOV DS:[1000H], AL 其意义是将AL的内容送存储器数据段中偏移地址为 1000H的单元中去。
例2: 若指令改写为MOV AL,DS: [1000H]
指令意义为将数据段中偏移地址为 1000H 单元中的 内容送AL寄存器。前者指的是存储单元的地址,后者指 的是存储单元的内容
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 ;
4、隐含操作数:这类操作数被操作助记符隐含着。 如,对压缩BCD加法结果进行调整的DAA,其操 作数就是隐含操作数AL。
5 、I/O端口操作数:可以作源操作数或目的操作数。 (I/O端口地址,可以直接或寄存器间接给出)
如: IN AL, 44H
OUT 量和常量三个概念:
例如:MOV AX,BX
3
8086/8088指令概述
例如:MOV AX,BX
用 MOV表示进行数据传送的操作码,用 AX、 BX表示操作数, 显然这样的表示方式更清晰,更便于记忆和使用。 用符号、助记符书写的指令称为符号指令。用符号指令书写程 序的规范称为汇编语言,对应的程序称为汇编语言源程序。

ch3 8086指令系统(寻址方式)

ch3 8086指令系统(寻址方式)
本例执行完后, AX=3050H
第三章 8086/8088 指令系统
A1 34 12 ... 50 30 ... ...
... 指令
代码段
设DS=3000H DS16 = 3000H×16 =30000H 30000H + 1234H
31234H
30 56
AH
EA=1234H
31234H
AX
数据段
代码段
DS16
AH AX AL
20000H EA=BX(=1000H) 数
21000H
50
A0
A0 50
据 段
这种寻址方式的优点就在于可以随时修改 BX寄存器的内 容,而指向不同的存储单元。故BX又称为基址指针寄存器。
第三章 8086/8088 指令系统
例:ADD AX,[SI] EA=SI 操作:以 EA 作为有效地址,在数据段中 找到某个操作数,再将该操作数与 AX 的内容 相加,结果存放在AX中。
授课教师:王磊 齐鲁工业大学电气学院 办公室:机电楼C320 E-mail:wanglei@
第三章 8086/8088 指令系统
回顾
第三章 8086/8088 指令系统
第三章 8088/8086指令系统
学习内容
指令的基本概念和指令所包含的基本内容。 8086指令的格式及编码方式。 8086指令的寻址方式及寻址过程。 8086指令系统的分类、功能及操作过程,每条指令的
3.1 概述
指令操作数
零操作数指令: 操作码 单操作数指令: 操作码 [操作数] 双操作数指令: 操作码 [操作数] , [操作数] 多操作数指令: 三操作数及以上

MOV AX,1234H 指令操作:把数1234H传送到寄存器AX

第三章8086的寻址方式和指令系统

第三章8086的寻址方式和指令系统
若使用[BP]间接寻址,则默认段基址在SS中。
115-140 21
指令操作例:MOV AX,[SI]
若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H
则指令执行后,(AX)=3344H。 DS 6000 SI 1200
存储器
60000 +) 1200
若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H
则物理地址 = 60000H + 1000H + 2A00H = 63A00H
指令执行后:(AX)=5566H
(见下页图示)
115-140 25
MOV AX,DATA[BX]
115-140
35
小结
指令由( 操作码 )和( 操作数 )构成 如何取得操作数——称为(寻址方式)
115-140
36
立即寻址 直接寻址 寄存器寻址 寻址方式可分为
寄存器间接寻址
寄存器相对寻址 基址-变址寻址 基址-变址相对寻址
115-140
37
寄存器间接、寄存器相对、基址变址、相对 基址变址四种寻址方式的比较:
115-140
28
指令操作例:MOV AX,[BX][SI]
假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H 指令执行后: (AL)=[83000H] (AH)=[83001H] .
DS BX + SI
操作数的有效地址由一个基址寄存器和一个变址 寄存器的内容之和,两个寄存器均由指令指定,称 为基址-变址寻址。

8086CPU中的寻址方式一

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指令操作数的寻址方式实验总结

8086指令操作数的寻址方式实验总结

8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。

通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。

在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。

1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。

在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。

MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。

通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。

2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。

8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。

MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。

在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。

3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。

在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。

MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。

实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。

4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。

在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。

MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。

在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。

5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。

8086寄存器和7种寻址方式

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寻址方式及举例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七种寻址方式

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字节的段内寻找操作数。

直接寻址的操作数通常是程序使用的变量。

3 8086的寻址方式和指令系统

3 8086的寻址方式和指令系统
⑴ reg——通用寄存器、专用寄存器
⑵ seg——段寄存器 ⑶ mem——存储单元 ⑷ imm——立即数
ruction)最简单、最常
用的一类指令,一般功能为把数据从 一个存储位置搬运到另一个存储位置, 一般不影响标志位。
一、MOV —— 数据传送指令
(4C002H)=5A78H
源操作数为寄存器间接寻址,有效地址由 (BP)指出,隐含使用的段寄存器为SS 要特别注意隐含搭配的段寄存器。
⑷寄存器相对寻址方式
操作数在存储器内,利用基址或变址寄存器内容加上位移 量作为偏移地址来寻址内存中的数据 形式: 位移量[寄存器] 或 [位移量+寄存器]
偏移地址EA= 5000H 物理地址 =35000H
例②: 执行指令 :ADD 5[BP],BL 执行前 BL=40H, BP=0030H,SS=2000H, (20035H)=50H 求执行结果 (20035H)=90H
⑸基址变址寻址方式:
操作数在存储器中,指令将基址寄存器(BX或BP) 与变址寄存器(SI或DI)内容之和作为操作数的偏移 地址。 形式: [基址寄存器名+变址寄存器名]
⑶ 寄存器间接寻址
形式: [寄存器]
例: MOV AX,[BX] 操作数的偏移地址存在基址或变址寄存器中、操作数存在 内存。 寄存器名要用方括号括起,以便与寄存器寻址相区别。 (BX) +段寄存器DS段地址 (SI) 物理地址 = (DI) (BP) +段寄存器SS段地址
物理地址计算方法: 物理地址 =(DS) * 16 + (BX)或(SI)或(DI) 物理地址 =(SS) * 16 + (BP)
MOV [2000H], BL
MOV [3000H], AL
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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] ⑦
相关文档
最新文档