8086的寻址方式
第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中的七种寻址⽅式寻址⽅式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位偏移,得到要取指令 的物理地址。
8086io寻址范围

8086io寻址范围
8086的CPU是一款经典的16位处理器,其寻址能力是非常强大的。
由于其16位的架构,8086的寻址范围是2^16,也就是65536个地址。
这些地址可以用来访问内存单元或者是I/O端口。
由于一个地址空间存放的数据大小为一个字节,所以其寻址空间为65536字节,也就是64KB。
然而,8086的地址总线是20位的,这意味着它可以访问的地址空间远远超过16位处理器的寻址范围。
用两个16位表示这20位地址,即a*16+b的形式,其中a和b 都是16位的寄存器。
因此,8086的I/O寻址范围是2^20,也就是1048576个地址。
这些地址可以用来访问各种I/O 端口或者是内存映射的I/O设备。
所以,8086的寻址能力是非常强大的,它不仅可以轻松地管理内存,还可以方便地访问各种I/O设备。
第三章 8086的寻址方式和指令系统[3-4]
![第三章 8086的寻址方式和指令系统[3-4]](https://img.taocdn.com/s3/m/78ceee7227284b73f24250f3.png)
§3-3 8086的指令系统
3、循环控制指令(Iteration Control)
通常的循环控制
MOV CX, N ; N为循环次数 BEGIN: …. …. …. DEC CX JNZ BEGIN 用LOOP BEGIN替换
循环体
有了循环控制指令,上面程序简化为: MOV CX, N BEGIN: ……
单字节指令,总是被安排在中断服务程序的出口处。
任何中断服务程序不管是外部中断引起的,还是内部中断引起的 , 最后都要
用IRET返回。
举例:
主程序: CODE START: SEGMENT ASSUME CS:CODE, DS:CODE …… STI . . . ENDS END START 中断子程序: …… STI . . . CLI … STI IRET
微型计算机原理与接口技术
第 8讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done
( 1 )无符号数比较测试指令中,指令助记符中的“ A”是英文 Above的缩写, 表示“高于”之意,“B”是英文Below的缩写,表示“低于”之意;
(2)带符号数比较测试指令中,指令助记符中的“G”(Great than)表示大于, “L”(Less than)表示小于。
12:16
17
§3-3 8086的指令系统
24
CODE
12:16
§3-3 8086的指令系统
6类指令系统:
数据传送指令 算术运算指令 逻辑运算和移位指令 字符串处理指令
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。
微机原理与接口技术 (第三版)电子工业出版社 第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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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+3000H
3.寄存器寻址
操作数包含在CPU 的内部寄存器中,如寄存器AX、BX、CX、DX 等。
例如:MOV DS,AX
MOV AL,BH
4.寄存器间接寻址
操作数是在存储器中,但是,操作数地址的16 位偏移量包含在以下四个寄存器SI、DI、BP、BX 之一中。
可以分成两种情况:
(1) 以SI、DI、BX 间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)*16 加上SI、DI、BX 中的16 位偏移量,为操作数的地址,【例如】MOV AX,[SI] 操作数地址是:(DS)*16+(SI)
(2) 以寄存器BP 间接寻址,则操作数在堆栈段区域中。
即堆栈段寄存器(SS)*16 与BP 的内容相加作为操作数的地址,【例如】MOV AX,[BP] 操作数地址是:(SS)*16+(BP)
若在指令中规定是段超越的,则BP 的内容也可以与其它的段寄存器相
加,形成操作数地址。
【例如】MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)
5.变址寻址
由指定的寄存器内容,加上指令中给出的8 位或16 位偏移量(当然要由一个段寄存器作为地址基准)作为操作数的偏移地址。
(操作数在存贮器中)
可以作为寄存器变址寻址的四个寄存器是SI、DI、BX、BP。
(1) 若用SI、DI 和BX 作为变址,则与数据段寄存器相加,形成操作数的地址即默认在数据段;
(2) 若用BP 变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段。
【例如】MOV AX,COUNT[SI];
操作数地址是:(DS)*16+(SI)+COUNT
但是,只要在指令中指定是段超越的,则可以用别的段寄存器作为地址基准。
6.基址加变址寻址
把BX 和BP 看成是基址寄存器,把SI、DI 看着是变址寄存器,把一个基址寄存器(BX 或BP)的内容加上一个变址寄存器(SI 或DI)的内容,再加上指令中指定的8 位或16 位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,如图所示。
操作数在存贮器中,其偏移地址由(基址寄存器)+(变址寄存器)+相对偏移量形成
基址寄存器――BX:数据段、BP:堆栈段;
变址寄存器――SI、DI。
【例如】MOV AX,[BX][SI] 或MOV AX,[BX+SI]
也可放置一个相对偏移量,如COUNT 、MASK 等等,用于表示相对寻址。
MOV AX,MASK[BX][SI]
MOV BH,COUNT[DI][BP];MOV BH,COUNT[BP+DI]
若用BX 作为基地址,则操作数在数据段区域
若用BP 作为基地址,则操作数在堆栈段区域
但若在指令中规定段是超越的,则可用其它段寄存器作为地址基准。
表1 段寄存器使用的基本约定。