Presentation is loading. Please wait.

Presentation is loading. Please wait.

微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.

Similar presentations


Presentation on theme: "微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日."— Presentation transcript:

1 微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日

2 微机原理与接口技术 寻址方式 朱华贵 2015年09月25日

3 3.1 概述 指令是指挥计算机进行操作的命令。 指令系统是指微处理器能执行的各种指令的集合。 程序是一系列按一定顺序排列的指令。
执行程序的过程就是计算机的工作过程。 微处理器的主要功能由它的指令系统来体现。 不同的微处理器有不同的指令系统,其中每一条指令对应着处理器的一种基本操作,这在设计微处理器时确定。

4 指令格式 通常一条指令包括两部分: 指令的一般格式如下: 操作码 [操作数1,操作数2,……,操作数n]
操作码:决定要完成的操作 操作数:指参加运算的数据或是该数所在的内存单元的地址。 指令的一般格式如下: 操作码 [操作数1,操作数2,……,操作数n] 没有操作数的指令称为无操作数指令。 有两个操作数的指令称为双操作数或二地址指令。 操作码和操作数地址都由二进制数码表示,整条指令以二进制编码的形式存放在存储器中。

5 操作数来源 指明操作数所在的地方。 操作数有三种来源: 1、操作数在指令中,称立即数操作数; 如:MOV AL,9
2、操作数在寄存器中,称寄存器操作数; 3、操作数在内存单元中,称存储器操作数或内存操作数。用[ ]表示存储器操作数。 如:MOV AL,[2000H]

6 指令操作数类型 指令应指明参与操作的数字节还是字,即操作数的类型。 1、指令中有寄存器操作数,由寄存器操作数决定操作数类型;
例: MOV [BX],AL;字节操作 [BX] ← AL MOV [BX],AX;字操作 [BX] ← AL,[BX+1] ← AH 在DEBUG下查看指令代码 D:\>DEBUG -A 13A0:0100 MOV [BX],AL 13A0:0102 MOV [BX],AL 13A0:0104 -U 100 13A0: MOV [BX],AL 13A0: MOV [BX],AX …… 两条指令的机器码是不同的:0788H,0789H

7 2、指令操作数中无寄存器,则有内存操作数的类型决定;若无则需对存储器操作数加类型说明。
例:MOV WORD PTR [BX],0 MOV BYTE PTR [BX],0

8 指令系统与寻址方式的重要性 采用不同CPU的计算机的指令系统不同。 采用不同CPU的计算机的指令的格式不同。
要使用某种微处理器,必须先要掌握其指令系统和各指令允许的寻址方式。

9 3.2 8086寻址方式 寻址方式: 指令中给出的求出操作数有效地址的方法。 寻址操作:
计算机按照指令给出的寻址方式求出操作数有效地址的过程。

10 8086的七种基本的数据寻址方式 存储器寻址方式 (1)立即寻址; (2)寄存器寻址; (3)直接寻址; (4)寄存器间接寻址;
(5)寄存器相对寻址; (6)基址变址寻址; (7)相对基址加变址寄存器寻址。 存储器寻址方式

11 3.2.1 立即寻址 操作数直接出现在指令中,此时的操作数也叫立即数。 立即数紧跟在操作码后面,一起存放在代码段中。 例如:
MOV AX,2010H 在该指令格式中,AX是目标操作数,2010H是源操作数。

12 立即寻址方式的指令执行示意图

13 立即寻址方式说明 在所有的指令中,立即数只能作源操作数,不能作目标操作数。 立即数应与目标操作数的长度一致。
立即数默认采用十进制形式,以十六进制形式出现的立即数应以字母H为后缀,以八进制形式出现的立即数应以字母Q为后缀。 以十六进制形式出现的立即数,若以字母开头,则必须以数字0为前缀。 立即数还可以用表示+、-、×、/表示的算术表达式,也可以用圆括号改变运算顺序。 立即数只能是整数,不能是小数、变量或其它类型的数据。

14 3.2.2 寄存器寻址 操作数在寄存器中,在指令中指定寄存器号。 由于寄存器号短,因此,采用寄存器寻址方式的指令的机器码长度短。
操作数在寄存器中,指令执行时,操作就在CPU的内部进行,不需要通过访问存储器来取得操作数,因而指令的执行速度快。 在编程中,如有可能,应尽量在指令中使用这种寻址方式。 例如: MOV AX,2010H

15 寄存器寻址方式可用的寄存器 对于16位操作数,寄存器可以是: 对8位操作数,寄存器可以是: AX,BX,CX,DX SI,DI,SP,BP
CS,DS,SS和ES 对8位操作数,寄存器可以是: AH,AL BH,BL CH,CL DH,DL

16 寄存器寻址方式指令执行示意图

17 寄存器寻址方式说明 在一条指令中,寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存器寻址方式。
源操作数与目标操作数的长度应一致。例如,不能将寄存器AX的内容传送到寄存器BH中,也不能将寄存器BH的内容传送到寄存器AX中。 两个操作数不能同时为段寄存器。 目标操作数不能是代码段寄存器。

18 5种与内存单元有关的寻址 1、操作数存放在内存中,取完指令后还需到内存取数;
2、指令中给出的该操作数的地址,包括段地址和偏移地址;指令中用[ ] 给出偏移地址。 3、按给出偏移地址方式的不同,分为以下5种: 直接寻址: MOV AL,[1000H] 寄存器间接寻址: MOV AL,[BX] 寄存器相对寻址: MOV AL,[BX+10H] 基址加变址寄存器寻址:MOV AL,[BX+SI] 相对基址加变址寄存器:MOV AL,[BX+SI+10H] 除直接寻址外,内存操作数地址只能由BX/BP、SI/DI给出。

19 3.2.3 直接寻址 操作数在存储器中,指令中以具体数值的形式直接给出操作数所在存储单元的有效地址EA。为了与立即数区别,该有效地址必须用[ ]括起。 例如: MOV AX,[2010H] 该指令的源操作数采用直接寻址方式。 若(DS)=2000H,那么指令执行后,(AX)=1225H。 段基地址 EA 操作数 + 指令 存储器

20 直接寻址方式指令执行示意图

21 采用直接寻址方式时,如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数据段。
8086系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中指明段超越。 例如: MOV ES:[1225H],AX 该指令的目标操作数采用直接寻址方式。操作数存放在由ES指示的附加段中。 物理地址=ES×10H+1225H。

22 在汇编语言指令中,可以用符号地址代替数值地址。 例如: MOV AX,NUMA 上面这条指令还可以写成如下的形式:
如DATA1数据存放在附加段,则可以用如下的形式指定段跨越前缀: MOV AX,ES: NUMA 或 MOV AX,ES:[ NUMA]

23 直接寻址示例1 MOV AX, [1000H] 物理地址 设(DS)=10A0H 代码段 + OP 00H 10H 数据段
代码段 OP 00H 10H 数据段 11A00H H 50H 1000H 10A0H 10A00H 1000H 低地址 11A00H 11A00H 主意提醒段地址×16(左移4位) 30H 50H AX 50H 30H (本章中图示存储器地址从上到下递增)

24 直接寻址示例2 MOV BL, ES:[0100H] 物理地址 设(ES)=3000H H (DS)=2000H H 30100H B 00 BL 0100H 3000H 30100H 30100H 4B 4B 在汇编语言指令中,可以用符号地址代替数值地址 如:MOV AX, BUFF 或 MOV AX, [BUFF] 其中BUFF为存放数据单元的符号地址。

25 3.2.4 寄存器间接寻址 操作数的有效地址EA存放在基址寄存器BX、BP或变址寄存器SI、DI中。
为了区别于寄存器寻址方式,指令中指定的寄存器名要用[ ]括起来。 指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址=(DS)×10H+(SI)/(DI)/(BX) 或 (SS)×10H+(BP)

26 例如: MOV AX,[SI] 该指令的源操作数采用寄存器间接寻址方式。 若(DS)=2000H,(SI)=2010H,那么指令执行后,(AX)=1225H。 如操作数不存放在间址寄存器默认的段,则指定段超越的指令可采用如下形式。 MOV AX,ES:[SI] 此时,操作数的物理地址=ES×10H+SI。

27 寄存器间接寻址方式指令执行示意图

28 … MOV AH, [BP] MOV BX, [SI] MOV CX, SI
设 (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址 物理地址 10000H H + 0B10H AH 40H 00H 3EH 46H 1000H 2000H 0B10H 032AH 10B10H 10B10H 2032AH 2032AH AH 10B10H 40H 032AH 40H 032AH SI 10B11H 032AH CX 2032AH 3EH 463EH BX 2032BH 46

29 3.2.5 寄存器相对寻址 操作数的有效地址EA是指令中指定的基址或变址寄存器的值与位移量之和。
指令中使用SI、DI、BX寄存器时,操作数默认存放在数据段中;使用BP寄存器时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址=(DS)×10H+(SI)/(DI)/(BX)+8位或16位位移量 =(SS)×10H+(BP)+8位或16位位移量

30 例如: MOV AX,8[BX] 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,那么指令执行后,(AX)=1225H。

31 寄存器相对寻址方式的指令执行示意图

32 寄存器相对寻址说明 偏移量是符号数,8位偏移量的取值范围为:00~0FFH(即+127D~-128D);
16位偏移量的取值范围为:0000~0FFFFH(即+32767D~-32768D)。 8086汇编允许用下面三种形式表示相对寻址,它们是等效的。 MOV AX,[BX]+8 MOV AX,8[BX] MOV AX,[BX+8]

33 3.2.6 基址加变址寄存器寻址 操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值之和。
指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中,允许段超越。 操作数的物理地址 =(DS)×10H+ (BX) + (SI)/(DI) =(SS)×10H+ (BP) + (SI)/(DI)

34 例如: MOV AX,[BX] [SI] 该指令的源操作数采用基址变址寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=8H; 则指令执行后,(AX)=1225H。

35 基址变址寻址方式的指令执行示意图

36 3.2.7 相对基址加变址寄存器寻址 操作数的有效地址EA是指令中指定的基址寄存器的值与变址寄存器的值以及8位或16位位移量之和。
指令中使用基址寄存器BX时,操作数默认存放在数据段中; 使用基址寄存器BP时,操作数默认存放在堆栈段中; 允许段超越。 操作数的物理地址PA =(DS)×10H+ (BX)+ (SI)/(DI)+8位或16位位移量 =(SS)×10H+ (BP)+ (SI)/(DI)+8位或16位位移量

37 例如: MOV AX,3[BX] [SI] 该指令的源操作数采用寄存器相对寻址方式。 若(DS)=2000H,(BX)=2008H,(SI)=5H,那么指令执行后,(AX)=1225H。

38 相对基址加变址寄存器寻址方式的指令执行示意图

39 利用DEBUG学习寻址方式 在DEBUG下汇编下列指令,并查看每条指令执行后的结果: MOV BX,2000H MOV [BX],CS
用R命令是否可以? 操作数[BX]在哪里? 它的内存地址如何构成?


Download ppt "微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日."

Similar presentations


Ads by Google