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. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
8086微处理器存取原则

8086微处理器存取原则
8086微处理器是一种16位微处理器,其存取原则包括以下几个方面:
1. 存储器的字节寻址能力,8086微处理器具有16位的数据总线和20位的地址总线,因此可以寻址的内存空间为2的20次方,即1MB。
它可以直接访问1MB的内存空间,这为当时来说是非常大的一个数字。
2. 存储器的字节和字寻址,8086微处理器可以以字节(8位)或字(16位)为单位进行存取。
它可以以字节为单位或者以字为单位进行寻址,这种灵活的寻址方式为程序员编写程序提供了便利。
3. 存储器的奇偶地址存取,8086微处理器的存储器奇偶地址存取是指它可以以字为单位存取数据,但是在存取字时,它要求字的起始地址必须是偶数。
如果字的起始地址为奇数,8086会进行两次内存访问,将两个奇地址的字节合并成一个字。
这种存取方式称为奇偶地址存取。
4. 存储器的段地址和偏移地址,8086微处理器采用段地址和
偏移地址的方式来访问内存。
它通过将一个16位的段地址左移4位再加上一个16位的偏移地址来得到20位的物理地址。
这种寻址方式可以方便地访问1MB的内存空间。
总的来说,8086微处理器的存取原则包括了对存储器的大小、存取单位、奇偶地址存取和段地址偏移地址寻址方式的规定,这些原则为程序员编写程序提供了灵活和方便的条件。
第三章 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] 相对基址变址寻址
8086-8088 CPU的寻址方式

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/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指令系统(寻址方式)

第三章 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指令操作数的寻址方式实验总结在计算机体系结构的学习中,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及8088指令系统1(寻址方式)

助记符
数据传送 MOV,PUSH/POP,XCHG等
8088/8086的操作数分为 类 的操作数分为4类 的操作数分为
操作数
数据(立即数) 数据(立即数) 地址: 寄存器(名称 存储器单元(地址) 名称)、 地址 寄存器 名称 、存储器单元(地址) I/O接口的端口(地址) 接口的端口( 接口的端口 地址)
3、存储器操作数
表示当前参加运算的数存放在存储器的某1/2/4个单元中 个单元中 表示当前参加运算的数存放在存储器的某
类型
字节 存储器操作数 字 双字
存储单元个数
1 2 4
11
一般不允许两个操作数同时为存储器操作数 一般不允许两个操作数同时为存储器操作数 不允许两个
存储单元的物理地址 存储单元的物理地址 = 段基地址×16 + 偏移地址
15
3.2
8086的寻址方式 8086的寻址方式
寻址方式——寻找操作数的方法 寻址方式 寻找操作数的方法
寻找操作数的地址(一般指源操作数) 寻找要执行的下一条指令的地址 在8086指令系统中,操作数所在地址的寻址 方式可分为8种:
①立即寻址 ②直接寻址 ③寄存器寻址 ④寄存器间接寻址 ⑤ 寄存器相对寻址 ⑥基址-变址寻址 ⑦相对的基址-变址寻址 ⑧隐含寻址
,立即 存放在
存的
码 中18
3.2.3 寄存器寻址
操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV MOV MOV 错误例: 错误例: × MOV × MOV AX, BX [3F00H], AX CL, AL AX, BL ES: AX, DX ; 字长不同 ; 寄存器与段无关
8088/8086指令系统 指令系统: 指令系统 系列) (1)指令向后兼容(x86系列) )指令向后兼容( 系列 (2)应用广泛,资料易于寻找 )应用广泛,
8086的寻址方式和指令系统第三章作业

MOV RESULT , AX MOV AX , X1+2
SUB AX , X2
ADC AX , X2+2
MOV RESULT, AX (4)MOV AX ,X1
MOV RESULT+2,AX
XCHG AX ,X2 XCHG AX ,X1
3-10.
3-11.
LEA SI ,ARRAY LEA DI ,NEW MOV CX ,7 MOV WORD PTR SUM ,0 LA: MOV AL ,[SI] ADD SUM ,AL ADC SUM+1 ,0 ADD AL ,5 MOV [DI],AL INC SI INC DI LOOP LA MOV AX ,SUM MOV CL ,7 DIV CL MOV AVERAGE ,AL
MOV DX ,X+2
MOV AX ,X
ADD AX ,X
ADC DX ,X+2
CMP DX ,Y+2
([有符号数]JG/JA[无符号数]) L2 ([有符号数]JL/JB[无符号数]) L1
CMP AX , Y ([有符号数]JG/JA[无符号数]) L2
L1: MOV AX , 1 JMP EXIT
(11)BX=1E6CH CF=0
3-13.
3-14.
(12)DX=4186H CF=0
3-15. (1)逻辑地址 1200H:0278H PA=12278H (2)逻辑地址 1200H:0300H PA=12300H (3)逻辑地址 1200H:4800H PA=16800H (4)逻辑地址 3400H:0ABCH PA=34ABCH (5)逻辑地址 00FFH:4800H PA=058F0H 3-16. (1)AX=5H BX=10H CX=0 DX=0 (2)AX=2H BX=4H CX=3H DX=1H (3)AX=3H BX=7H CX=2H DX=0
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寄存器中。
- 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 段寄存器使用的基本约定。