《微机原理课件第3章寻址方式与指令系统》由会员分享,可在线阅读,更多相关《微机原理课件第3章寻址方式与指令系统(63页珍藏版)》请在金锄头文库上搜索。
1、1,本章主要教学内容 指令格式及寻址的有关概念 8086CPU指令系统的寻址方式及其应用 8086CPU各类指令的表示、功能、特点及其应用 常用的DOS和BIOS中断调用简介 Pentium微处理器新增指令和寻址方式,第3章 寻址方式与指令系统,2,本章教学目的及要求 通过学习,应掌握8086CPU指令系统的寻址方式及地址计算方法;8086CPU指令及其应用;DOS和BIOS中断调用;熟悉Pentium微处理器增加的寄存器、寻址方式和专用指令等。,第3章,寻址方式与指令系统,3,第3章,3-1-1 指令系统与指令格式 1. 指令与指令系统 指令是要求计算机执行特定操作的命令,通常一条指令对应一
2、种特定操作。指令的执行是在计算机的CPU中完成的,每条指令规定的运算及基本操作都是简单的、基本的,它和计算机硬件所具备的能力相对应。 计算机所能执行的全部指令的集合称为指令系统。指令系统是计算机硬件和软件之间的桥梁,是汇编语言程序设计的基础,它与微处理器的性能密切相关,性能优越的指令系统可以更快更好地运行各种程序,实现更多的微处理器性能。,3.1 指令格式及寻址,4,第3章,寻址方式与指令系统,2. 指令格式 计算机是通过执行指令来处理数据的,为了指出数据的来源、操作结果的去向以及所执行的操作,指令应该由操作码字段和操作数字段两部分组成。 (1)操作码字段:规定指令的操作类型,说明计算机要执行
3、的具体操作。 (2)操作数字段:说明在指令执行的过程中需要的操作数,它可以是操作数本身,也可以是操作数地址或是地址的一部分,还可以是指向操作数的地址指针或其它有关操作数据的信息。,5,3-1-2 寻址及寻址方式的概念 对于一条指令来说,要解决两个问题:一是要指出进行什么操作,这由指令操作码来表明;二是要指出操作数的来源,这就是操作数的寻址方式。 计算机中大多数指令采用一个或两个操作数。操作数有3种表示形式,分别称为立即数、寄存器操作数和存储器操作数。 指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数,这种寻找操作数的过程称为寻址,寻址方式就是寻找操作数或操作数
4、地址的方式。根据寻址方式可以方便地访问各类操作数。,第3章,寻址方式与指令系统,6,第3章,寻址方式与指令系统,8086指令中的操作数有三种可能的存放位置: (1)立即操作数在指令中,即指令的操作数部分就是操作数本身。 (2)寄存器操作数包含在CPU的某个内部寄存器中,这时指令的操作数部分是CPU内部寄存器的一个编码。 (3)存储器操作数在内存的数据区中,这时指令的操作数部分包含此操作数所在的内存地址。,7,第3章,寻址方式与指令系统,8086提供了与数据有关和与I/O端口地址有关的两类寻址方式。 其中,与操作数有关的寻址方式共7种,分别是立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存
5、器相对寻址、基址变址寻址和相对基址变址寻址方式; 与I/O端口地址有关的寻址方式分别是直接端口寻址和间接端口寻址方式。,3-2 8086指令系统的寻址方式,8,第3章,寻址方式与指令系统,3-2-1 与数据有关的寻址方式 1. 立即数寻址方式 操作数直接存放在指令中,紧跟在操作码之后就是立即数寻址方式。主要用来对存储器或寄存器赋值,且只能用于源操作数字段,不能用于目的操作数字段。 例如: MOV AL,11001010B ;将二进制数11001010B 送寄存器AL MOV AL,0FH ;将十六进制数0FH送AL MOV AX,1234H ;将1234H送AX; AH中为12H,AL中为34
6、H MOV AL,10 ;将十进制数10送AL,9,第3章,寻址方式与指令系统,2. 寄存器寻址 操作数存放在CPU的内部寄存器时,可在指令中指出寄存器名,这种寻址方式就叫寄存器寻址方式。 8位操作数可采用AH、AL、BH、BL、CH、CL、DH、DL等寄存器保存;16位操作数可采用AX、BX、CX、DX、SI、DI、SP、BP等寄存器保存。 例如:MOV AX,BX ;将BX的内容送AX ADD AX,BX ;执行(AX)(AX)+(BX),10,第3章,寻址方式与指令系统,3存储器寻址方式 由于寄存器数量有限,所以程序中的大多数操作数需要从内存中获得。内存的寻址方式有多种,最终都将得到存放
7、操作数的物理地址。 8086指令系统提供了以下5种针对存储器的寻址方式。 (1)直接寻址 指令中给出的地址码即为操作数的有效地址,称为直接寻址方式。 (2)寄存器间接寻址方式 这种寻址方式是在指令中给出寄存器,寄存器中的内容为操作数的有效地址。,11,第3章,寻址方式与指令系统,(3)寄存器相对寻址方式 这种寻址方式是在指令中给定一个基址寄存器(或变址寄存器)和一个8位或16位的相对偏移量,两者之和作为操作数的有效地址。 (4)基址变址寻址 这种方式是在指令中给出一个基址寄存器和一个变址寄存器,两者内容之和作为操作数的有效地址。过程分析 (5)相对基址变址寻址 这种寻址方式是在指令中给出一个基
8、址寄存器、一个变址寄存器和8位或16位的偏移量,三者之和作为操作数的有效地址。,12,第3章,寻址方式与指令系统,3-2-2 与I/O端口有关的寻址方式 8086CPU采用独立编址的I/O端口,有专门的输入指令IN和输出指令OUT,寻址方式有如下两种: 1. 直接端口寻址 直接端口寻址是在指令中直接给出要访问的端口地址,一般采用2位十六进制数表示,也可以用符号表示,可访问的端口范围为0255。 例如:IN AL,25H 表示从I/O端口地址为25H的端口中取数据送到寄存器AL中。,13,第3章,寻址方式与指令系统,2. 寄存器间接端口寻址 若访问的端口地址值大于255,则必须用I/O端口的间接
9、寻址方式。它是把I/O端口的地址先送到DX中,用DX作为间接寻址寄存器。此种方式可访问的端口范围为065535。 例如: MOV DX,285H ;将端口地址285H送到DX寄存器 OUT DX,AL ;将AL中的内容输出到DX指定的端口,14,第3章,寻址方式与指令系统,8086指令系统按功能可以分为以下6类指令: 数据传送类指令 算术运算类指令 逻辑运算(位操作)类指令 串操作类指令 控制转移类指令 处理器控制类指令,3-3 8086指令系统,15,第3章,寻址方式与指令系统,3-3-1 数据传送类指令 数据传送类指令是计算机中最基本、最重要也是最常用的一种指令,其功能是把数据、地址或立即
10、数传送到寄存器或存储单元。 此类指令除了SAHF和POPF外均不影响标志寄存器的内容。 按照传送的内容和功能的不同,可将数据传送指令分为3组,见表3-1所示。其中dst表示目的操作数,src表示源操作数。,16,表3-1 数据传送指令,17,第3章,寻址方式与指令系统,1. 通用数据传送指令 (1)传送指令MOV 格式:MOV dst,src MOV 指令的功能是把源操作数src传送至目的操作数dst,执行后源操作数内容不变, 目的操作数内容与源操作数内容相同。 源操作数可以是通用寄存器、段寄存器、存储器以及立即数,目标操作数可以是通用寄存器、段寄存器(CS除外)或存储器。,18,数据之间的传
11、送关系如图3-3所示。,图3-3 MOV指令中各类数据的传送关系,19,第3章,寻址方式与指令系统,使用MOV指令进行数据传送时要注意以下几点: (1) 段寄存器CS及立即数不能作为目标操作数; (2) 两个存储单元之间不允许直接传送数据; (3)立即数不能直接传送到段寄存器; (4)两个段寄存器之间不能直接传送数据; (5)传送数据的类型必须匹配; (6)MOV指令不影响标志位。,20,【例3.6】MOV指令的应用形式分析如下: MOV AL,35H ;8位立即数35H送AL MOV DX,1234H ;16位立即数1234H送DX MOV DL,B ;字符B的ASCII码送DL MOV C
12、L,BL ;8位寄存器之间传送 MOV AX,BX ;16位寄存器之间传送 MOV AX,2100H ;存储单元数据送AX MOV 0210H,SI ;SI中内容送指定存储单元 MOV DS,AX ;AX中内容送段寄存器DS MOV SI,DS ;DS的内容送SI所指示单元 MOV ES,BX ;BX所指的存储单元内容送ES,21,第3章,寻址方式与指令系统,(2)堆栈操作指令PUSH/POP 进栈指令:PUSH opr ;SPSP2,将源操作 数opr压入堆栈 出栈指令:POP opr ;栈顶弹出字数据到目标 操作数opr,SPSP+2 堆栈是存储器中的一个特殊区域,主要用于存入和取出数据,
13、堆栈是以“先进后出”的方式进行数据操作的。在8086的堆栈组织中,堆栈从高地址向低地址方向生长,它只有一个出入口,堆栈指针寄存器SP始终指向堆栈的栈顶单元,22,第3章,寻址方式与指令系统,(3)XCHG 交换指令 XCHG指令用来将源操作数和目的操作数的内容进行交换。它可以实现字节数据交换,也可以实现字数据交换。 该指令的操作数必须有一个是在寄存器中,即可以在两个通用寄存器之间或寄存器与存储器之间交换数据,但不能在两个存储器之间交换数据。指令执行结果不影响标志位。,23,第3章,寻址方式与指令系统,2. 累加器专用传送指令 8086指令系统中将累加器AX作为数据传输的核心,系统的输入/输出指
14、令IN/OUT和换码指令XLAT就是专门通过累加器来执行的,称之为累加器专用传送指令。 (1)IN/ OUT 输入/输出指令 IN Acc,src ;Acc为8位或16位累加器。 OUT dst,Acc (2)XLAT换码指令 指令格式为:XLAT ;执行操作AL(BX+AL),24,第3章,寻址方式与指令系统,3. 地址传送指令 8086的地址传送指令用于控制寻址,可将存储器操作数的地址传送到16位目标寄存器中。这类指令有3种形式: (1)有效地址送寄存器指令:LEA reg,src LEA指令功能是将存储器操作数src的有效地址传送到16位的通用寄存器reg。 (2)地址指针送寄存器和DS
15、指令:LDS reg,src 该指令完成一个32位的地址指针传送,地址指针包括段地址和偏移地址两部分。 (3)地址指针送寄存器和ES指令:LES reg,src LES指令执行的操作与LDS指令相似,不同之处是以ES代替DS。,25,第3章,寻址方式与指令系统,4. 标志寄存器传送指令 8086可通过这类指令读出当前标志寄存器中各标志位的内容,也可以重新设置各标志位的值。标志寄存器的传送指令共有4条,均位单字节指令,指令的操作数以隐含形式出现,隐含为AH寄存器。 (1)取标志指令LAHF (2)置标志位指令SAHF (3)标志寄存器入栈指令PUSHF (4)标志寄存器出栈指令POPF,26,第
16、3章,寻址方式与指令系统,3-3-2 算术运算类指令 8086的算术运算类指令包括加、减、乘、除4种基本运算指令,以及为进行BCD码十进制数运算而设置的各种较正指令。 8086的基本算术运算指令中,除加1和减1指令外,其余均为双操作数指令,两个操作数中除了源操作数可为立即数外,必须有一个操作数在寄存器中,而单操作数指令则不允许采用立即数方式。,27,第3章,寻址方式与指令系统,算术运算指令涉及无符号数和带符号数两种类型的数据。加减运算采取同一套指令,乘除运算有各自不同的指令。 加减法运算在执行过程中有可能产生溢出,对于无符号数,如果加法运算最高位向前产生进位,减法运算最高位向前有借位,则表示出现溢出,用CF标志位可检测无符号数是否溢出;对于带符号数,采用补码运算,符号位参加运算,溢出则表示运算结果发生错误,用OF标志位可检测带符号数是否溢出。,28,第3章,寻址方式与指令系统,算术运算指令会影响标志位,其规则如下: 运算结果向前产