微机原理与接口技术第3章-8086课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《微机原理与接口技术第3章-8086课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 8086 课件
- 资源描述:
-
1、第第3章章 8086/8088的寻址方式与指令系统的寻址方式与指令系统本章要点本章要点掌握8086/8088指令系统的基本概念、指令格式、指令功能和注意事项。重点掌握8086/8088指令系统中,各指令的格式、寻址方式、指令类型。了解80386的寻址方式和指令类型 3.1 8086/80883.1 8086/8088寻址方式寻址方式 指令系统是指微处理器能执行的各种指令的集合。微处理器的主要功能是由它的指令系统体现的。每种计算机都有自己支持的指令集合。16位8086指令系统是整个Intel 80 x86 系列微处理器指令系统的基础。3.1.1 3.1.1 指令格式指令格式1指令的基本格式指令的
2、基本格式计算机只能识别由二进制编码表示的指令,即机器指令。机器指令由操作码和操作数两部分组成。操作码:给出该指令要完成何种操作,即操作类型,在汇编语言中用助记符表示。操作数:指令中的操作对象(参与运算的对象),可以是参与运算的数据,也可以是地址码。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,分别称为一地址指令、二地址指令或三地址指令等等。指令的一般格式如图3-1所示。8086大多数指令的操作码中含有3个特征位,即W、D和S位,其含义是:W:字操作标志位。W=1时,表示指令进行字操作,否则,为字节操作。D:对目的操作数进行寄存器寻址的标志。D=1时,寄
3、存器所寻址的是目的操作数;D=0,寄存器所寻址的是源操作数。S:符号扩展位。一个8位补码可以扩展为16位的补码,扩展方法是高字节的每一位都等于低字节的最高有效位,即符号扩展。S与W的组合指出操作类型,如表3-1所示。操作码域后面通称为操作数域,这些字节可以是如下内容之一:2字节的有效地址(针对直接寻址方式);1字节或2字节的位移量;1字节或2字节的立即数(针对立即寻址方式);1字节或2字节的位移量,后面再跟1字节或2字节的立即数;2字节的位移量和2字节的段地址(针对段间直接转移)。2 2机器语言指令代码的编制机器语言指令代码的编制 汇编语言指令(其他高级语言亦如此)必须翻译成机器指令,才能被计
4、汇编语言指令(其他高级语言亦如此)必须翻译成机器指令,才能被计算机直接执行算机直接执行.两字节两字节MOVMOV指令编码格式如图指令编码格式如图3-23-2所示所示 响应的编码见下表响应的编码见下表 3.1.2 3.1.2 寻址方式寻址方式80X86汇编语言的指令格式为:名字名字 操作数操作数1 1 ,操作数操作数2 2 ,操作数操作数3 3 ;注释注释指令助记符指令助记符:体现该指令的功能,它对应一条二进制编码的机器指令。操作数操作数:指令的操作对象,其个数由该指令确定,可以没有操作数,也可以有一个、二个或三个操作数。名字区名字区:内容可以是变量名、过程名、段名或标号等等。寻址方式:寻址方式
5、:就是指寻找操作数或操作数地址的方法。操作数可以跟在指令就是指寻找操作数或操作数地址的方法。操作数可以跟在指令操作码之后,称为立即数;也可以存放在操作码之后,称为立即数;也可以存放在CPUCPU内部的寄存器中,称为寄内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数,存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数,这类指令需指定操作数的位置,即给出地址信息,在执行时需要根据这这类指令需指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。个地址信息找到需要的操作数。8086寻址方式1 1立即寻址方式立即寻址方式 在这种
6、寻址方式下,操作数直接包含在指令中,它是一个8位或16位的常数。这类指令翻译成机器码时,立即数作为指令的一部分,紧跟在操作码之后,存放在代码段内。如果立即数是16位数,则高字节存放在代码段的高地址存储单元中,低字节放在低地址存储单元中。2 2寄存器寻址方式寄存器寻址方式操作数在某个寄存器中的寻址方式称为寄存器寻址。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,则用寄存器AH、AL、BH、BL、CH、CL、DH和DL。注意注意:源操作数的长度必须与目的操作数一致,否则会出现类型不匹配错误。3 3直接寻址方式直接寻址方式 在8086/8088中,把
7、操作数的偏移地址称为有效地址EA。指令中直接给出操作数所在存储单元的有效地址的寻址方式称为直接寻址。有效地址存放在代码段的指令操作码之后的两个存储单元中。这种寻址方式必须先求出操作数的物理地址,然后才能经译码选中要访问的存储单元。要注意的是当采用直接寻址方式时,如果指令中没有用段前缀指出操作数存放在哪一段,则默认使用的段寄存器为数据段寄存器DS,因此,操作数的物理地址16*DS+EA,指令中有效地址必须加一个方括号作为标识,以便区分立即数。4 4寄存器间接寻址方式寄存器间接寻址方式 指令中寄存器的值为操作数所在存储单元有效地址的寻址方式称为寄存器间接寻址。在这种寻址方式中,寄存器名两边必须加方
8、括号,以区分寄存器寻址方式。这类寻址方式中使用的寄存器有基址寄存器BX、BP及变址寄存器SI、DI。如果指令中指定的寄存器是BX、SI、DI,则默认操作数存放在数据段DS中,如果指令中用寄存器BP进行间接寻址,则操作数在堆栈段中,操作数的默认段地址在SS寄存器中。在指令中也可以通过指定段前缀,从默认段以外的段中取得数据。5 5寄存器相对寻址方式寄存器相对寻址方式 操作数的有效地址是一个基址或变址寄存器的内容与8位或16位的位移量之和的寻址方式称为寄存器相对寻址。当指令中指定的寄存器是BX、SI或DI时,默认段寄存器使用DS,当指定寄存器为BP时,默认段寄存器为SS。6 6基址变址寻址方式基址变
9、址寻址方式 操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和的寻址方式称为基址变址寻址,两个寄存器均由指令指定。当基址寄存器为BX时,默认段寄存器用DS;当基址寄存器为BP时,默认段寄存器为SS。7相对基址变址寻址方式相对基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容,再加上指令中指定的8位或16位位移量之和的寻址方式称为相对基址变址寻址。其有效地址的形式有VALUEBXSl、BX+VALUESI和BX+SI+VALUE三种。3.2 80863.2 8086指令系统指令系统 指令按功能可分为6大类,即数据传送指令、算术运算指令、逻辑
10、运算和移位指令、字符串处理指令、控制转移指令以及处理器控制指令。3.2.1 3.2.1 数据传送类指令数据传送类指令数据传送指令共14条,它们可完成寄存器和寄存器之间、寄存器与存储器之间、累加器AX或AL与I/O端口之间的字或字节的传送,堆栈操作指令也归入这一类,此外还包括一组标志位传送指令和一组地址传送指令。这类指令中,除SAHF和POPF指令外,对标志位均没有影响。1 1通用数据传送指令通用数据传送指令(General Purpose Data Transfer)MOV指令格式:MOV 目的操作数,源操作数功能:将源操作数(一个字节/字)传送到目的操作数。指令中至少要有一项明确说明传送的是
11、字节还是字,MOV指令允许数据传送的途径如图3-3所示。图3-3 MOV指令允许数据传送途径 PUSH进栈指令(Push Word onto Stack)格式:PUSH 源操作数 功能:将源操作数入栈。源操作数可以是16位的通用寄存器、段寄存器或存储器中的数据字,但不能是立即数。堆栈是以“先进后出”的方式工作的一段存储区,栈区的段地址由SS寄存器的内容确定。堆栈的最大容量可为64KB,即一个段的最大容量。堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向变化,最小为0。POP出栈指令(Pop Word off Stack)格式:POP 目的操作数 功能:把当前SP所指向
12、的堆栈顶部的一个字送到指定的目的操作数中。目的操作数可以是16位通用寄存器、段寄存器或存储单元,但CS不能作目的操作数。每执行一次出栈操作,SP=SP+2,即SP向高地址方向移动,指向新的栈顶。XCHG交换指令(Exchange)格式:XCHG 目的操作数,源操作数功能:把一个字或字节的源操作数和目的操作数相交换。交换可以在寄存器之间、寄存器与存储器之间进行,但段寄存器不能作为操作数,也不能直接交换两个存储单元中的内容。XLAT查表指令(Table Look up)格式:XLAT 功能:把有效地址为BX+A的L字节单元的值送AL,即ALBX+AL。使用XLAT指令必须先给某段连续的内存单元区赋
13、值,这段连续的内存单元就相当于一张表,同时将表的起始地址装入BX寄存器中。要查找的表地址送AL,这个表地址等于表头地址与所要查找的某一项之间的位移量,但一般不大于表的长度(最多256个字节)。2 2输入输出指令输入输出指令 (Input and Output)(Input and Output)输入输出指令用来完成I/O端口与累加器之间的数据传送,指令中给出I/O端口的地址。当执行输入指令时,把指定端口中的数据读入累加器中;执行输出指令时,把累加器中的数据写入指定的端口中。IN输入指令(Input)格式:IN AL,端口地址 或 IN AX,端口地址 IN AL,DX;或 IN AX,DX功能
14、:把一个8位端口的值读入AL中或把连续两个8/16位端口的值读入AX中。OUT输出指令(Output)格式:OUT 端口地址,AL 或 OUT 端口地址,AXOUT DX,AL 或 OUT DX,AX;功能:将AL的值写到一个8位端口中,或把AX的值写到连续两个8/16位端口中。3 3地址目标传送指令地址目标传送指令 (Address Object Transfers)(Address Object Transfers)这是一类专用于传送地址码的指令,它可以用来传送操作数的段地址和偏移地址,共包含以下三条指令。LEA指令(Load Efective Address)格式:LEA 目的操作数,源
15、操作数功能:把源操作数的偏移地址传送到目的操作数。该指令要求源操作数必须是存储器操作数,目的操作数必须是一个除段寄存器之外的16位寄存器。LDS指令(Load Pointer using DS)格式:LDS 目的操作数,源操作数功能:把源操作数指定的连续四个存储单元的值取出,低字(连续两个低地址单元内容)送到指令中指定的目的寄存器中,高字(连续两个高地址单元内容)送入DS寄存器。LES指令(Load Pointer using ES)格式:LES 目的操作数,源操作数功能:把源操作数指定的连续四个存储单元的值取出,低字(连续两个低地址单元内容)送到指令中指定的目的寄存器中,高字(连续两个高地址
16、单元内容)送入ES寄存器。4 4标志位传送指令标志位传送指令(Flag Tramfers)这类传送指令共有4条。LAHF标志位送AH指令(Load AH from Flags)格式:LAHF功能:把标志寄存器SF、ZF、AF、PF和CF的值传送到AH的第7、6、4、2和0位,执行这条指令后,标志位本身并不受影响。SAHF AH送标志位到寄存器(Store AH into Flags)格式;SAHF功能:把AH中的7、6、4、2、0位的值传送到标志寄存器的SF、ZF、AF、PF和CF位,高位标志OF、DF、IF和TF不受影响。PUSHF指令(Push Flags onto Stack)格式:PU
17、SHF功能:把标志寄存器的内容入栈,这条指令执行后对标志位无影响。POPF指令(Pop Flags off Stack)格式:POPF功能:把当前堆栈指针SP所指的一个字,传送给标志寄存器。3.2.2 3.2.2 算术运算类指令算术运算类指令 算术运算指令可处理4种类型的数:无符号二进制整数、带符号二进制整数、无符号压缩十进制整数(Packed Decimal)和无符号非压缩十进制整数(Unpacked Decimal)。二进制数可以是8位或16位长,若是带符号数,则用补码表示。压缩十进制数可在一个字节中存放两个BCD码十进制数,若只在一个字节的低半字节存放一个十进制数,而高半字节为全零,这种
18、数称为非压缩十进制数。80868088指令系统提供了加、减、乘、除四种基本运算指令,可处理无符号或带符号的8位或16位数的算术运算,还提供了各种调整操作指令,故可进行压缩的或非压缩的十进制数的算术运算。绝大部分算术运算指令都影响状态标志位。对于加法和减法运算指令,带符号数和无符号数的加法和减法运算的操作过程是一样的,故可以用同一条加法或减法指令来完成。而对于乘法和除法运算,带符号数和无符号数的运算过程完全不同,必须分别设置无符号数和有符号数的乘除法指令。这四种运算指令见表3-4所示。1 1加法指令加法指令(Addition)ADD不带进位的加法指令(Addition)格式:ADD 目的操作数,
19、源操作数功能:将源操作数和目的操作数相加,结果送到目的操作数中。即目的操作数=源操作数+目的操作数 ADC带进位的加法指令(Addition with Carry)格式:ADC 目的操作数,源操作数功能:把目的操作数、源操作数以及进位标志CF的值相加,结果送到目的操作数中,即目的操作数=源操作数+目的操作数+CF INC加1指令(Increment)格式:INC 目的操作数功能:目的操作数加1,结果送回目的操作数。即目的操作数=目的操作数+l目的操作数可以是通用寄存器或存储器。该指令执行影响AF;OF、PF、SF和ZF标志位,但不受影响进位标志CF。AAA加法的ASCII调整指令(ASCII
20、Adjust for Addition)格式:AAA功能:在用ADD或ADC指令对两个非压缩BCD码或ASCII码表示的十进制数作加法后,运算结果已存在AL的情祝下,用此指令将AL寄存器中的运算结果调整为1位非压缩BCD码,调整后的结果仍保留在AL中,如果AF=1,表示向高位有进位,则进到AH寄存器中。AAA指令执行时,将对AL中的运算结果进行如下调整:若AL低4位9或半进位标志AF=1,则AL=AL+6;用与操作将AL高4位清0;AF置1,CF置1,AH=AH+1,否则,仅将AL寄存器的高4位清0。DAA压缩BCD数加法调整指令(Decimal Adjust for Addition)格式:
21、DAA功能:将两个压缩BCD数相加后的结果调整为正确的压缩BCD数。相加后的结果必须在AL中,才能使用DAA指令。DAA指令执行时,调整过程为:若AL低4位9或AF1,则AL=AL+6且AF=1;若AL高4位9或CF1,则AL=AL+60H且CF=1。DAA指令影响SF、ZF、AF、PF和CF标志位。2 2减法指令减法指令(Subtraction)SUB不带借位的减法指令(Subtraction)格式:SUB 目的操作数,源操作数功能:将目的操作数减去源操作数,结果送回到目的操作数。即目的操作数=目的操作数-源操作数 SBB带借位的减法指令(Subtract with Borrow)格式:SB
22、B 目的操作数,源操作数功能:将目的操作数减去源操作数,再减去借位位。即目的操作数=目的操作数-源操作数-CF。ADD指令、ADC指令、SUB指令和SBB指令都影响六个状态标志位。DEC减1指令(Decrement)格式:DEC 目的操作数功能:目的操作数减1,结果再送回此操作数。即目的操作数=目的操作数-1 CMP比较指令(Compare)格式:CMP 目的操作数,源操作数功能:将目的操作数减去源操作数,但结果不回送到目的操作数中,仅将结果的状态送标志位,可供条件跳转指令决定程序的去向。以上四条指令都是做减法运算,而且都可以进行字或字节运算。对于SUB、SBB和CMP这类双操作数指令,源操作
23、数可以是寄存器、存储器或立即数;目的操作数可以是寄存器或存储器,但不能为立即数,而且要求两个操作数不能同时为存储器。对于DEC单操作数指令,目的操作数可以是寄存器或存储器,但不能为立即数,如果是存储器操作数,还必须说明其类型是字节还是字。运算之后,除DEC指令不影响CF标志外,其它指令均影响OF、SF、ZF、AF、PF和CF标志。AAS调整指令(ASCII Adjust for Subtraction)格式:AAS功能:在SUB或SBB指令对两个非压缩十进制数或以ASCII码表示的十进制数进行相减后,对AL中所得结果进行调整,在AL中得到一个正确的非压缩十进制数之差。如果有借位,则CF置1。A
24、AS指令必须紧跟在SUB或SBB指令之后。AAS指令执行时,调整过程为:若AL寄存器的低4位9或AF1,则AL=AL-6,AF置1;将AL寄存器高4位清零;AH=AH-l,CF置1,否则,不需要调整。DAS调整指令(Decimal Adjust for Subtraction)格式:DAS功能:在两个压缩十进制数用SUB或SBB相减后,结果已存在AL中的情况下,对所得结果进行调整,在AL中得到正确的压缩十进制数。同样,它也要对AL中高半字节和低半字节分别进行调整。DAS指令执行时,调整过程为:如果AL寄存器的低4位9或AF1,则AL=AL-6,AF置1;如果此时AL高半字节9或标志位CF=1,
25、则AL=AL-60H,CF置l。3 3乘法指令乘法指令(Multiply)MUL无符号数乘法指令(Multiply)格式:MUL 源操作数功能:把源操作数和累加器中的数都看成无符号数相乘,乘积送累加器。该指令中的源操作数可以是字节或字。当源操作数是一个字节时,目的操作数为AL,乘积为16位数,高8位送到AH,低8位送AL;当源操作数是一个字时,目的操作数为AX,乘积为32位数,高16位送到DX,低16位送到AX。在乘法指令中,源操作数可以是寄存器,也可以是存储单元,但不能是立即数。当源操作数是存储单元时,必须在源操作数前说明是字节还是字。MUL指令执行后影响CF和OF标志位,如果结果的高半部分
展开阅读全文