第三章 8086的寻址方式和指令系统[3-1]

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微型计算机原理与接口技术
第五讲 佘青山
86919130 qsshe@hdu.edu.cn
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
第三章 8086的寻址方式和指令系统
内容提要
8086的寻址方式
微机系统指令的机器码表示方法(自学)
8086的指令系统
2
§3-1 8086的寻址方式
一、概述
1、有关定义 指令(Instruction) --指示CPU执行某种规定操作的命令 指令集或指令系统 (Instruction Set)
14
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
例: MOV AX,3102H ; AX 3102H
执行后,AH = 31H,AL = 02H
存储器 立即寻址指令在存储 器中的存放形式 AX AH AL 操作码 立 即 数
操作码 低8位 高8位
代 码 段
02H 31H
指令执行后: AX = 1234H 注意:如用AL代替AX,则AL=34H
数 据 段
23
§3-1 8086的寻址方式
用符号地址代替数值地址(即给存储单元起个名字)
ຫໍສະໝຸດ Baidu
比如:MOV AX, AREA1
AREA1代表符号地址,还是表示一个立即数? 例1:伪指令EQU(定义符号) AREA1 EQU 2000H;AREA1代表立即数
代 码 段
15
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
注意:
(1)在所有指令中,立即数只能用于源操作数,而不 能作目的操作数。 (2)以A~F打头的数字出现在指令中时,前面一定要 加一个数字0,以免与其它符号混淆。 例: × MOV 2A00H, AX ; 错误!
在8086指令系统中,寻址方式可分为8种:
一、立即寻址 二、寄存器寻址
三、直接寻址
四、寄存器间接寻址
五、寄存器相对寻址
六、基址变址寻址 七、相对基址变址寻址 八、其它:隐含寻址、I/O端口寻址等
13
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
5
§3-1 8086的寻址方式
一、概述
4、指令的一般格式
操作数可以有零个,一个或两个。
操作码
示例:
(1)单操作数指令: INC
操作数
。。。 操作数
AX;只需要指出加1的操作数,它是单操作数指令。
(2)双操作数指令:如 ADD AX, BX
大多数运算型指令都是双操作数指令。
(3)无操作数指令:如 NOP(空操作指令)
当指令中的源操作数或目的操作数,采用直接给出操作数的偏移 地址时,这种寻址方式称直接寻址。
特点:
(1)在讨论寻址方式时,通常把操作数的偏移地址称为有效地址 EA(Effective Address) ,EA可通过不同的寻址方式来得到。 (2)在直接寻址方式中,指令中直接给出操作数的有效地址。操 作数的有效地址(不是操作数本身)存放在代码段中指令的操作码之 后,而操作数总是存放在存储器中。 (3)操作数一般存放在数据段中,也允许存放在数据段以外的其 它段(如CS、ES、SS),此时应在指令中给出“跨越段前缀”。 (4)偏移地址也可用符号地址(即给存储单元起个名字)来表示。
25
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing)
注意:
(1)指令中有效地址的表示:[立即数] ,以便与立即数相区别。 (2)如果没有用“段跨越前缀”标明操作数在哪一段,就默认段寄存器 为数据段寄存器(DS)。 (3)如数据在数据段以外的其它段(即CS、SS、ES)中,则应指明 “段跨越前缀”。如MOV AX , ES : [100H],冒号“:”称为修改 属性运算符。 (4)为了使指令字不要过长,规定双操作数指令不能两个操作数都用直 接寻址方式。
定义: 指令中直接给出操作数,操作数紧跟在操作码之后, 作为指令的一部分存放在代码段里,在取出指令的同时 也就取出了操作数,立即有操作数可用,所以称之为立 即寻址。 特点: 立即数可以为8位,也可以为16位。如果是16位数, 则“高字节存放在代码段的高地址单元中,低字节存放在代 码段的低地址单元中”。 作用: 常用于给寄存器赋初值。
一、概述
举例:
MOV AL, 7 ;立即数取入累加器
ADD
HLT
AL,10 ;加立即数
;停机
说明
汇编指令(助记符形式) 机器码(二进制形式) MOV AL, 7
1011 0000(MOV AL, n) 一条两字节指令,把指 令第二个字节的立即数 0000 0111(n=7) 送到累加器AL 0000 0100(ADD AL, n) 一条两字节指令,累加 器AL中的内容与指令第 二字节的立即数相加, 0000 1010(n=10) 结果放在AL中 1111 0100(HLT) 停止操作
6
§3-1 8086的寻址方式
一、概述
5、操作指令
现代微型计算机中多采用双操作数指令,两个操作数分别称 为“目的操作数”和“源操作数”。指令执行后,把运算结 果放到目的操作数的地址之中。 指令的操作码在机器中的表示比较简单,只要对每一种操作 指定相应的二进制代码即可;而指令的操作数字段的情形就 比较复杂。
……
MOV AX, AREA1 则 (AX)=1234H
24
§3-1 8086的寻址方式
用符号地址代替数值地址(即给存储单元起个名字)
例2:伪指令DW(定义变量)
AREA1 DW 2000H;AREA1代表符号地址 …… MOV AX, AREA1; (或MOV AX, [AREA1]) 则如右图所示, DS=2000H, AX=1234H
--某一CPU所能执行的全部指令的集合 定义了程序员能使硬 件完成的基本操作。
机器指令(机器码)
--指令的二进制代码形式。例如:CD21H
汇编指令
--利用指令的助记符( Mnemonic Symbol )、符号地址、标号 来编写的语言。例如:MOV AX, 21H
3
§3-1 8086的寻址方式
16
§3-1 8086的寻址方式
二、寄存器寻址(Register Addressing) 定义:
操作数在寄存器中,指令中指明寄存器的名称,这种寻 址方式叫寄存器寻址。
特点:
(1)对于8位操作数,寄存器可以是 AH, AL, BH, BL, CH, CL, DH, DL 。对于16位操作数,寄存器可以是AX, BX, CX, DX, SI, DI, SP 和 BP 。 (2)操作数就在寄存器中,不需要访问存储器来取得操作数 (指令执行时,操作就在CPU的内部进行),因而执行速度快。 (3)在编程中,如有可能,尽量使用这种寻址方式的指令。
二、寄存器寻址(Register Addressing)
注意:
(1)源操作数与目的操作数的长度要相同。
(2)寄存器寻址与段地址无关。
例: MOV AX, BX MOV [3F00H], AX MOV CL, AL × MOV AX, BL ;源、目操作数长度不一致! × MOV ES: AX, DX ;寄存器寻址与段地址无关!
4
ADD AL, 10
HLT
§3-1 8086的寻址方式
一、概述
2、指令通常应提供的信息
按做什么操作 操作数从哪里来 操作结果放在哪里 对于调用和转移指令,还要涉及转移或调用地址的提供方式
3、指令的组成
操作码( Opcode ) --标明计算机要执行什么操作 操作数( Operand ) --指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地 方),以及操作结果送到哪里。 操作数可以存放在寄存器、存储器、I/O端口地址中,也可以是在指 令中(立即数)。
三、直接寻址(Direct Addressing)
例: MOV AX,[3102H]
如果DS=2000H, (23012H) =1234H 则操作数的物理地址为:
DS×16+EA =2000H×16+3102H =20000H+3102H = 23102H
AH AL
23102H 存储器 操作码 02H 31H . . 34H 12H 代 码 段
§3-1 8086的寻址方式
一、概述
6、寻址方式
定义:指令中用于说明操作数所在地址的方法。 一个指令系统能够提供哪些寻址方式,能否为编制程序提供 方便,这是指令系统设计的关键。 说明:在不同的计算机系统中,寻址方式的名称和分类并不 统一。 各种寻址方式指令执行速度不同: 操作数在寄存器中指令执行速度快:在CPU内部立即执行 立即数寻址指令执行速度较快:直接从指令队列中取数 操作数在存储器中指令执行速度较慢:通过总线与CPU交换 数据
19
§3-1 8086的寻址方式
寻址方式
注意:除以上两种寻址方式(立即寻址:操作数 包含在指令中,而寄存器寻址:操作数包含在寄 存器中)外,下面各种寻址方式的操作数均在 存储器中,通过采用不同的寻址方式取得操作 数的物理地址,从而取得操作数。
20
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing) 定义:
双操作数指令形式:操作码
目的操作数,源操作数
7
§3-1 8086的寻址方式
一、概述
三类操作数(分别对应三种可能的存放位置):立即数,寄存 器操作数,存储器操作数 (1)立即数:操作数以常量的形式出现指令中,称为立即数。
8位 无符号数 带符号数 00H~FFH(0~255) 80H~7FH(-128~127) 16位 0000H~FFFFH (0~65535) 8000H~7FFFH (-32768~32767)
作用:寄存器之间传递数据。
17
§3-1 8086的寻址方式
二、寄存器寻址(Register Addressing)
例: MOV DX,AX ; DX
指令执行前:AX=2233H 指令执行后:AX=2233H,DX=2233H
AX内容不变
AX
AX
2233H
DX
18
§3-1 8086的寻址方式
作用:实现对存储器单元的读/写操作。
21
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing)
例:
MOV AX , [2A00H]
MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
存储器存取时约定段
22
§3-1 8086的寻址方式
9
§3-1 8086的寻址方式
一、概述
(3)存储器操作数:指令要使用的数据存放在内存单元 中,在指令中给出内存地址或访问存储器的方法。 存储单元个数 类型
字节
存储器操作数 字 双字
一般不允许两个操作数同时为存储器操作数
如何寻找存储器操作数?段基地址 + 偏移地址
1
2
4
指令中的某个操作数可能是上述三种中的任意一种形式,为了 明确具体操作数的存在位置,必须首先明确操作数的寻址方式。 10
11
§3-1 8086的寻址方式
一、概述
各种寻址方式指令执行速度不同:
CPU进行读/写存储器的操作:
把一个偏移量送到BIU,计算出20位物理地址; 执行总线周期存取操作数。
注意:
尽量使用寄存器作为操作数 若有可能,用移位代替乘除法 尽量使用简单的寻址方式
12
§3-1 8086的寻址方式
立即数只能作为指令的源操作数, 如:
MOV AX,0FA00H MOV 8000H,DX ;正确 ;错误
8
§3-1 8086的寻址方式
一、概述
(2)寄存器操作数:指令要使用的数据存放在CPU内部 寄存器中,在指令中给出寄存器的名称。
放在8个通用寄存器(AX,BX,CX,DX,SI,DI,SP,BP)或4个 段寄存器(CS,DS,SS,ES)中的操作数 既可以作为源操作数, 也可以用作目的操作数 通用寄存器可存放字节操作数(如AL), 也可存放字操作数 (如AX) SI, DI, BP及SP只能存放字操作数 段寄存器只能存放当前操作数的段基地址 不允许将立即数传送到段寄存器: × MOV DS,200H
相关文档
最新文档