8086寻址
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端口位置区域的分配由外围设备的制造商进行规划,保证不同的外围设备具有不同的端口位置区域,从而避免了位置区域冲突。
第3章 8086的指令系统—3.1寻址方式
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式
传送指令的用法及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具有了很好的灵活性和通用性。
8086中的七种寻址方式
8086中的七种寻址⽅式寻址⽅式8086/8088有七种基本的寻址⽅式:⽴即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。
其中,后五种寻址⽅式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址)属于存储器寻址,⽤于说明操作数或操作数地址所在存储单元的地址。
这五种⽅式也就是确定存放操作数的存储单元有效地址EA的⽅法,这⾥所说的有效地址就是在前⾯⼀节讲存储器分段中所说的段内偏移地址。
除了这些基本的寻址⽅式以外,还有固定寻址和I/O端⼝寻址等,但不会在本节中介绍到。
基本寻址⽅式下⾯重点说⼀下这七种基本寻址⽅式的特点:1. ⽴即寻址⽅式先解释⼀个概念,叫做⽴即数。
操作数包含在指令中,它作为指令的⼀部分,跟在操作码后存放在代码段。
这种操作数称为⽴即数。
⽴即寻址⽅式所提供的操作数紧跟在操作码后⾯,与操作码⼀起放在指令代码段中,不需要到其他地址单元中去取。
⽴即数可以是8位,也可以是16位。
这种寻址⽅式主要⽤于给寄存器或存储单元赋初值的场合。
⽴即寻址⽅式是这七种寻址⽅式中速度最快的寻址⽅式。
举例:MOV AX, 1234H ; 给AX寄存器赋值为1234H2. 寄存器寻址⽅式寄存器寻址的特点是操作数在CPU内部的寄存器中,在指令中指定寄存器号。
对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI和SP等;对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。
例如:MOV SI, AXMOV AL, DH由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采⽤寄存器寻址⽅式的指令执⾏速度较快。
3. 直接寻址⽅式直接寻址的操作数在存储器中,指令直接包含有操作数的有效地址。
由于操作数⼀般存放在数据段,所以操作数的地址由DS加上指令中给出的16位偏移得到。
假如DS内容是5000H,地址为51234H字存储单元中的内容时6789H,那么在执⾏“MOV AX, [1234H]”后寄存器AX的内容是6789H。
第二章 80868088寻址方式和指令系统
(5)奇偶标志PF
用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清0。
(6)辅助进位标志AF
在字节操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字 节进位或借位,则辅助进位标志AF被置1,否则AF被清0。
②状态控制标志
(1)方向标志DF
方向标志决定着串操作指令执行时,有关指针寄存器调整方向。 当DF为1时,串操作指令按减方式改变有关的存储器指针值, 当DF为0时,串操作指令按加方式 改变有关的存储器指针值。
其中:存储单元的物理地址是12345H, 标出的:两个重叠段的段值分别是:1002H和1233H, 在对应段内的偏移分别是2325H和0015H。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针IP、堆栈指针SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可直接用16位数给 出。
图中指令存放在代码段中,OP表示该指令的操作码部分 再例如: MOV AL,5 则指令执行后,(AL)=05H
MOV BX,3064H 则指令执行后, (BX)=3064H
2、寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数数,寄存器可以是:
AX、BX、CX、DX、SI、DI、SP和BP等;
指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动 形成20位物理址。
3、段寄存器的引用
由于8086/8088CPU有四个段寄存器,可保存四个段值。所以可同时使用四个段值,但这四个 段有所分工。
在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令 的物理地址。
微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统
4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址
汇编语言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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
寻址方式和指令系统
寻址⽅式和指令系统《微机原理》复习思考题第3章 8086的寻址⽅式和指令系统3.1 8086汇编语⾔指令的寻址⽅式有哪⼏类?⽤哪⼀种寻址⽅式的指令执⾏速度最快?3.2 直接寻址⽅式中,⼀般只指出操作数的偏移地址,那么,段地址如何确定?如果要⽤某个段寄存器指出段地址,指令中应如何表⽰?3.3 在寄存器间接寻址⽅式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 ⽤寄存器间接寻址⽅式时,BX,BP,SI,DI分别针对什么情况来使⽤?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进⾏说明。
3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下⾯两条指令所进⾏的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使⽤堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下⾯这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进⾏修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会⾃动禁⽌外部中断,等到本条指令和下条指令执⾏之后,⼜⾃动恢复对SS寄存器赋值前的中断开放情况。
这样做是为了允许程序员连续⽤两条指令分别对SS和SP寄存器赋值,同时⼜防⽌堆栈空间变动过程中出现中断。
3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请⽤换码指令和其他指令设计⼀个程序段,实现格雷码往ASCII的转换。
第三章 8086的寻址方式和指令系统
计算机的指令通常包含 操作码 和 操作数 两部分。
设SP为0100H,SS为1000H,则执行PUSH AX 后,
00FE H,SS= 1000 H。 8086系统中,栈底在堆栈的 最高地址 (最高地址端、 最低地址端)。
如果VAL为数据段中0056H单元的符号名,其中存放
16
习题 CH3 寻址方式和指令系统
(6)MOV [SI],[BX] 源、目的操作数不能同时为存储单元 (7)MOV DS,0200H 立即数不能直接送给段寄存器 (8)IN BL,05H BL不能作为IN指令的目的操作数 (9)MOV AX,IP IP不能作为操作数 (10)MOV SI,[DX] DX不能进行寄存器间接寻址 (11)PUSH AL PUSH指令以字为操作单位
用单条指令或程序片段,实现下述功能
(1)将AX高8位取反,低四位置1,其余位不变。
XOR AX, 0FF00H
OR AX, 0FH (2)将AL的高四位与低四位互换。 MOV CL, 4 ROL AL, CL
(3)将BX、AX内容互换。
XCHG AX, BX
12
习题 CH3 寻址方式和指令系统
[BP+SI+4]源操作数的有效地址为
地址为 数的有效地址为
,物理 0214H 24514H 。指令MOV AX,[DI+100H]源操作
0306H,物理地址
为 24306H 。 设AX=2000H,BX=2002H,则在执行了指令CMP AX,
BX后,标志位CF为
1 , AX=
。 2000H
基址变址寻址
(5)MOV AX,10[BX][DI] 相对基址变址寻址
第3章 8086 8088指令系统和寻址方式
第3章 指令系统和寻址方式
3.1 概述 3.2 数据寻址方式 3.3指令格式及指令执行时间 3.4 8088/8086 CPU的指令系统
3.1 指令系统概述
指令是计算机能够识别和执行的指挥计算机进行操作的命
令。指令系统是指微处理器能执行的各种指令的集合。
程序是指令的有序集合,指令是程序的组成元素,通常一
演示
3.2 数据寻址方式
2. 寄存器间接寻址方式
在计算机中通常将BX、BP称为基址寄存器,SI、DI称为
变址寄存器,寻址时操作数的地址被放在这些寄存器中。
寄存器间接寻址方式在汇编格式中表示为
[基址寄存器名或变址寄存器名]
【例】
MOV AX, [BX]
;AX←DS:[BX]
演示
3.2 数据寻址方式
直接寻址方式是指寻找的操作数的地址在指令中直接给出。 这种寻址方式在汇编格式中表示为 ● 操作码 地址表达式 (或[地址表达式]) ● 操作码 [数字表达式]
3.2 数据寻址方式
【例】
MOV AX, [2000H];AX←DS:[2000H] MOV AX, ES: [2000H] ;AX←ES:[2000H]
MOV AX, 0102H
;AX←0102H
演示
3.2 数据寻址方式
3.2.2 寄存器寻址方式
寄存器寻址是指寻找的操作数在某个寄存器中。 格式: 操作码 寄存器名
比如AL,BX,CX,DS、IP等等。 【例】
MOV AX, BX
;AX←BX
演示
3.2 数据寻址方式
3.2.3 存储器寻址方式
1. 直接寻址方式
若(CS)=5200H 时,物理转移地址为 B230H,则当CS 的内容被设定为7800H, 物理转移地址应为多少? =9230H 78000H +9230H=81230H。
微机原理第02章(寻址方式和传送指令)
有效地址由基址寄存器( BX 或 BP )的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应 BX基址寄存器默认是 DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
;AX←DS:[BX+SI]
段内偏移量为适应各种数据结构的需要,可以有几个部分组 成,所以也把它称为有效地址EA。
寻址方式不同EA的构成不同。归纳EA可有多种情况构成: 直接寻址,寄存器间接寻址,寄存器相对寻址,
基址加变址寻址,相对址加变址寻址。
寻址方式——如何寻找内存操作数。 不同寻址方式实质上是构成它段内的偏移量的方法不同。
34H 12H
堆 栈 段
...
寄存器间接寻址方式 MOV [BP], AX
3 、用 SI、DI、BX 、BP作为间接寻址允许段跨越
指令中可以指定段跨越前缀来取得其他段中的数据。
例:MOV ES:[DI], AX MOV DX, DS:[BP] 这种寻址方法可以用于表格处理。
第2章 (五)寄存器相对寻址方式(Register relative addressing)或变 址寻址 (Index Addressing)
8位位移量 PA=16d ×(SS)+ (BP) + 16位位移量
例: MOV AX, COUNT [BP] 或MOV AX, [COUNT+BP] 或MOV AX, COUNT+[BP]
AH AL 48H 存储器 OP OP 40H 20H 操 作 码 位移量 COUNT
COUNT为16位位移量。 指令执行前: (SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234H
第三章 8086的寻址方式
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表示操作数, 显然这样的表示方式更清晰,更便于记忆和使用。 用符号、助记符书写的指令称为符号指令。用符号指令书写程 序的规范称为汇编语言,对应的程序称为汇编语言源程序。
微型计算机原理与接口技术课件-第三章指令系统和寻址方式
超越前缀。例如,数据若放在附加段中,则应在
有效地址前加“ES:”,这里的冒号“:”称为 修改
属性运算符,计算物理地址时要用ES作基地址, 而不再是默认值DS。
例如: MOV AX,ES:[500H] 该指令的源操作数的物理地址等于16×ES+
500H。
3.符号地址 在汇编语言中还允许用符号地址代替数值地
MOV CL,AH 注意:源操作数的长度必须与目的操作数一
致,否则会出错。例如,不能将AH寄存器的内 容传送到CX中去,尽管CX寄存器放得下AH的 内容,但汇编程序不知道将它放到CH还是CL中。
这种寻址方式的优点是:寄存器数量 一般在几个到几十个,比存储器单元少很 多,因此它的地址码短,从而缩短了指令 长度,节省了程序存储空间;另一方面, 从寄存器里取数比从存储器里取数的速度 快得多,从而提高了指令执行速度。
用汇编语言(即主要由指令系统组成的语言)编写的程 序称为汇编语言源程序,若直接将它送到计算机,机器
并不认识那些构成程序的指令和符号的含义,还必须由
汇编程序将源程序翻译成计算机能认识的二进制机器语
言指令(机器码)后,才能被计算机识别和执行,得到运算 结果。
8086指令系统采用变长指令,指令的长度可由l~6 字节组成。一字节指令中只包含8位操作码,没有操作数。 如清进位位指令CLC的机器码为1111 1000,可直接从指 令编码表中查到。对于大部分指令来说,除了操作码(不 一定是8位)外,还包含操作数部分,所以要由几个字节组 成。不同的指令,其操作码和寻址方式都是不一样的,
例如:AREA1 EQU 0867H MOV AX,AREA1
例如:AREA1 DW 0867H MOV AX,AREA1 (该指令也可
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种寻址⽅式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寻址范围
8086是一种16位微处理器,其寻址范围相对有限。
在这个范围内,我们可以通过不同的方式来访问内存和外设。
8086的内存寻址范围是从0x00000到0xFFFFF,共计1MB的地址空间。
这个范围被分为多个段,每个段的大小为64KB,共有65536个段。
每个段又被分为16个段内偏移,每个偏移表示一个字节。
因此,8086可以寻址的内存单元总数为65536*16=1048576,即
1MB。
在8086中,我们可以通过使用段寄存器和偏移寄存器来访问内存。
段寄存器存储了段的起始地址,而偏移寄存器则存储了段内的偏移地址。
通过将段寄存器和偏移寄存器的值相加,我们可以得到要访问的内存地址。
除了内存,8086还可以通过端口来访问外设。
端口是一种特殊的
I/O地址,用于与外设进行通信。
8086的端口寻址范围是从0x0000到0xFFFF,共计65536个端口。
通过向端口写入数据或从端口读取数据,我们可以与外设进行交互。
除了直接寻址,8086还支持间接寻址。
间接寻址是通过使用寄存器来访问内存。
8086有8个通用寄存器,包括AX、BX、CX、DX、SI、DI、BP和SP。
通过将寄存器的值作为内存地址,我们可以访问存储在该地址处的数据。
总结起来,8086的寻址范围包括1MB的内存和65536个端口。
通过使用段寄存器和偏移寄存器,我们可以访问内存。
同时,通过使用通用寄存器,我们也可以间接地访问内存。
这种灵活的寻址方式使得8086能够满足各种应用的需求,并成为了计算机发展历程中的重要里程碑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.4.1 8086/8088指令系统的特点
指令是用来指挥和控制计算机进行某种操作的命令。指令的符号用规定的英文字母组成,称为助记符。每条指令由二进制代码(即指令码)组成,计算机通过解释每一条指令的含义,来执行指令所规定的各种操作。
8086/8088指令系统的特点
操作码是规定好的。
目操是reg,因此d=1;
操作数是8位,因此w=0;
源操是存储器寻址,带8位位移量,因此mod=01;
参加操作的寄存器(目操)是AH,因此reg=100;
具体分类:
1)直接寻址
直接给出EA大小。如[2000H],也可用符号地址表示,如[VALUE],也可直接写成VALUE。
PA=DSX16+EA。
2)寄存器间接寻址
EA为:BX、BP、SI、DI中的任一个。
又分为:
基址寻址——BX/BP
变址寻址——SI/DI
PA=DSX16+BX/SI/DI或PA=SSX16+BP。
disp表示位移量,data表示立即数。
寄存器编码及EA计算方法表
reg, r/m mod=00 mod=01 mod=10 mod=11
w=0 w=1
000 BX+SI BX+SI+Disp-8 BX+SI+Disp-16 AL AX
001 BX+DI BX+DI+Disp-8 BX+DI+Disp-16 CL CX
寄存器可以为:AX、BX、CX、DX、SI、DI、SP、BP(16位);AH、AL、BH、BL、CH、CL、DH、DL(8位)。
如:MOV CX,AX;则CX=AX,且AX内容不变
3、存储器寻址
存储器寻址的指令,其操作数一般位于代码段之外的数据段、堆栈段或附加段的存储器中。指令给出存储器单元或产生存储器单元地址的信息。存储器操作数可记为Mem。
src——源操作数,简称源操,第二操作数
标点符号为英文符号(1个字符),带[]的标号和注释可省略。
例:MOV AH,[BX+DI+50H]
该指令机器码为8A6150H:
opcode d w mod reg r/m Disp-low
100010 1 0 01 100 001 0101 0000
EA=基址(BX/BP)+变址(SI/DI)+位移量(Disp-0/8/16)——EU完成
注意:Disp是一个带符号数。
PA=段地址(SR)×16+EA——BIU完成
在计算物理地址PA时,BX(基址寄存器)、SI(源变址寄存器)、DI(目的变址寄存器)的默认段地址在DS中;若EA中含有BP(基址指针寄存器),则默认段地址在SS中。改变段地址则需加段超越前缀。
短格式,字节 OUT DX,AL (DX) ←AL
短格式,字 OUT DX,AX (DX) ←AL,
(DX+1) ←AH
5、转移类指令的寻址方式
以后讲解。
相对寻址:EA=IP当前值+偏移量
讲义中如有问题请直接和我联系:sora@
�
6)串寻址
串操作指令,SI:指向源串的第一个字节或字,DI:指向目标串第一个字节或字。
源串:PA=DSX16+SI
目标串:PA=ESX16+DI
段超越前缀:
MOV AL,ES:[BX+SI]
则源操PA=ESX16+BX+SI
MOV SS:[DI],AL
则目操PA=SSX16+DI
类型 格式 指令 描述 备注
输入指令 长格式,字节 IN AL,PORT AL←(PORT) CPU只使用AL、AX与
I/O端口交换信息
长格式指令为2字节
短格式指令为1字节
PORT=0~255,共256个
端口地址
DX=0000H~FFFFH,共
65536(64K)个端口地址
长格式,字 IN AX,PORT AL←(PORT),
操作码指明计算机所要执行的操作类型。在机器语言中由一组二进制代码表示,在汇编语言中用助记符表示。
操作数指明指令执行的操作过程中所需的操作数,操作数字段可以是操作数本身,也可以是操作数的地址,或者是操作数地址的运算方法,还可以是指向操作数地址的指针或其他有关操作数的信息。
2)8086/8088机器指令的一般编码格式(1~6字节,可变长):
首先CPU根据操作数字段提供的地址信息,由EU计算出有效地址EA,再由BIU根据公式:PA=SRX16+EA计算出实际地址(物理地址),执行总线周期访问存储器取操作数,最后再执行指令规定的操作。
存储器寻址方式的表达形式为[EA],注意一定要有[]。
所谓EA就是指操作数单元距段首单元的距离(字节数),是一个不带符号的16位数据。
110 DIRECT BP+Disp-8 BP+Disp-16 DH SI
111 BX BX+Disp-8 BX+Disp-16 BH DI
2、符号指令的书写格式
[lable:] 助记符 dst,src [;注释]
lable——标号,有“:”
dst——目的操作数,简称目操,第一操作数
1、 立即寻址
操作数直接包含在指令中,是一个8位或16位的常数,称为立即数(Im),可为8位或16位。立即数不能作目操。因操作数直接从指令中取得,不执行总线周期,因此执行速度快。
如:MOV AX,2000H;源操是立即数寻址方式
注意:源操和目操长度必须一致。
2、 寄存器寻址
操作数包含在寄存器中,由指令指定寄存器的名称。寄存器操作数可记为Reg。寄存器可作源操或目操。
AH←(PORT+1)
短格式,字节 IN AL,DX AL←(DX)
短格式,字 IN AX,DX AL←(DX),
AH←(DX+1)
输出指令 长格式,字节 OUT PORT,AL (PORT) ←AL,
长格式,字 OUT PORT,AX (PORT)← AL,
(PORT+1) ←AH
4)基址变址寻址
EA为:BX或BP+SI或DI。
PA=DSX16+BX+SI/DI或PA=SSX16+BP+SI/DI。
5)相对的基址变址寻址
EA为:BX或BP+SI或DI+Disp-8或Disp-16。
PA=DSX16+BX+SI/DI+Disp-8/16或PA=SSX16+BP+SI/DI+Disp-8/16。
1)采用可变长指令(1~6字节),指令格式比较复杂。
2)寻址方式多样灵活,处理数据能力较强。
3)有重复指令和乘除运算指令,扩充了条件转移、移位/循环指令。
4)增设了为加强软件中断功能和支持多处理器系统工作的指令。
3.4.2 指令的基本格式
1、机器码格式
1)指令的基本格式:
操作码(OP) 操作数(OD)1 操作数(OD)2 ……
w:指示操作数宽度,w=1,操作数是16位,w=0,操作数是8位。
mod:区分是寄存器寻址还是存储器寻址。
mod 寻址方式
00 存储器寻址,无位移量
01 存储器寻址,8位位移量
10 存储器寻址,16位位移量
11 寄存器寻址
reg:指示参加操作的寄存器编码。
r/m:指示寄存器编码,也可指示有效地址EA的计算方法。
源操EA的计算方法是BX+DI+Disp8,因此查表得r/m=001;
位移量是8位,因此Disp-low=50H。
注意:人工汇编过程不要求掌握,了解即可。
3.4.3 8086/8088的寻址方式
寻址方式:指令中用来说明操作数怎样存放及如何寻找操作数的方式。8086/8088的操作数可位于寄存器、存储器或I/O端口中,也可以是立即数。要说明指令的寻址方式,应对指令中的源操和目操分别说明其寻址方式。
3)寄存器相对寻址
EA为:BX、BP、SI、DI中的任一个+Disp-8或Disp-16。
又分为:
相对基址寻址——BX/BP+Disp-8/16
相对变址寻址——SI/DI+Disp-8/16
PA=DSX16+BX/SI/DI+Disp-8/16或PA=SSX16+BP+Disp-8/16。
执行MOV AX,[BX][SFra bibliotek] 则:(AX)=?
EA=BX+SI=8000H+90FEH=110FEH,取EA=10FEH
PA=DSX16+EA=20000H+10FEH=210FEH,显然该字为规格字。
AL=12H
AH=34H
AX=3412H
4、I/O端口寻址方式
8086/8088采用专门的I/O指令对端口地址进行操作。
010 BX+SI BX+SI+Disp-8 BX+SI+Disp-16 DL DX
011 BP+DI BP+DI+Disp-8 BP+DI+Disp-16 BL BX
100 SI SI+Disp-8 SI+Disp-16 AH SP
101 DI DI+Disp-8 DI+Disp-16 CH BP