书签 分享 收藏 举报 版权申诉 / 64
上传文档赚钱

类型微机原理与接口技术第3章-8086课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3146395
  • 上传时间:2022-07-22
  • 格式:PPT
  • 页数:64
  • 大小:585.50KB
  • 【下载声明】
    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标志位,如果结果的高半部分

    26、(字节操作为AH、字操作为DX)不为零,表明其内容是结果的有效位,则CF和OF均置1。否则,CF和OF均清0。通过测试这两个标志,可检测并去除结果中的无效前导零。IMUL有符号数乘法指令(Integer Multiply)格式:IMUL 源操作数 功能:把源操作数和累加器中的数都作为带符号数,进行相乘。结果存放的方式与MUL相同。如果源操作数为字节,则与AL相乘,结果送到AX中;如源操作数为字,则与AX相乘,高位字送到DX,低位字送到AX,最后给乘积赋予正确的符号。这两个乘法指令对除CF和OF以外的状态标志位无意义。AAM非压缩BCD数乘法指令(ASCII Adjust for Multipl

    27、y)格式:AAM 功能:对已存于AL中的两个非压缩BCD数相乘的乘积进行十进制数的调整,使得在AX中得到正确的非压缩BCD数的乘积,高位放在AH中,低位在AL中。两个BCD码数相乘之前,必须先屏蔽掉每个数字的高半字节,从而使每个字节包含一个非压缩BCD数,再用MUL指令相乘,乘积放到AL寄存器中,然后用AAM指令进行调整。4 4除法指令除法指令(Division)DIV无符号数除法指令(Division unsigned)格式:DIV 源操作数 功能:对两个无符号数进行除法运算。源操作数可以是字,也可以是字节,可以在寄存器中,也可以在存储单元中。如果源操作数为字节,被除数必须为16位,放在AX

    28、中。商在AL中,余数在AH中;如果源操作数为字,被除数必须为32位,高字放在DX中,低字放在AX中。16位的商放在AX中,16位的余数放在DX中。IDIV有符号数除法指令(Integer Division)格式:IDIV 源操作数 功能:该指令执行的操作与DIV相同,但操作数都必须是带符号数,商和余数也都是带符号数,而且规定余数的符号和被除数的相同。指令执行后,所有标志位均无定义。进行除法操作时,无论对无符号数除法(DIV)还是带符号数除法(IDIV),都要注意:由于除法指令字节操作时商为8位,字操作时商为16位,如果字节操作时,被除数的高8位绝对值大于除数的绝对值,或在字操作时,被除数的高1

    29、6位绝对值大于除数的绝对值,就会产生溢出,也就是说商数超过了目标寄存器AL或AX所能存放数的范围。CBW字节扩展为字指令(Convert Byte to Word)格式:CBW 功能:把寄存器AL中字节的符号位扩展到AH中,这时AH被称为是AL的符号扩充。CWD字扩展为双字指令(Convert Word to Double Word)格式:CWD 功能:把AX中字的符号位扩展到DX寄存器的所有位中去。AAD除法的ASCII调整指令(ASCIIAdjustforDivision)格式:AAD 功能:在做除法前,把BCD码转换成二进制数,使除法指令执行后,获得的商是1个非压缩十进制数。3.2.3

    30、3.2.3 逻辑运算与移位类指令逻辑运算与移位类指令 逻辑运算和移位指令对字节或字操作数进行按位操作,这类运算可分成逻辑运算指令、算术/逻辑移位指令和循环移位指令三类。1 1逻辑运算指令逻辑运算指令 (Logical Operations)(Logical Operations)NOT取反指令(Logical Not)格式:NOT 目的操作数 功能:将目的操作数按位取反,结果送回到目的操作数中。目的操作数可以是8位或16位寄存器或存储器操作数。对于存储器操作数,要说明其类型是字节还是字。该指令执行后不影响标志位。AND逻辑与指令(Logical AND)格式:AND 目的操作数,源操作数 功能

    31、:对两个操作数进行按位逻辑与运算,结果送回到目的操作数中。它主要用于使操作数的某些位保留(和“1”相与),而使某些位清除(和“0”相与)。该指令执行后影响标志位ZF、PF和SF,CF和OF置为0,AF无意义。OR逻辑或指令(Logical OR)格式:OR 目的操作数,源操作数 功能:对两个操作数进行按位逻辑或运算,结果送回到目的操作数中。它主要用于使操作数的某些位保留(和“0”相或),而使某些位置1(和“1”相或)。该指令执行后影响标志位ZF、PF和SF,CF和OF置为0,AF无意义。XOR异或操作指令(Exclusive OR)格式:XOR目的操作数,源操作数 功能:对两个操作数进行按位逻

    32、辑异或运算,结果送回到目的操作数中。它主要用于使操作数的某些位保留(和“0”相异或),而使某些位取反(和“1”相异或)。该指令执行后影响标志位ZF、PF和SF,CF和OF置为0,AF无意义。TEST测试指令(Test)格式:TEST 目的操作数,源操作数 功能:对两个操作数进行逻辑与运算,但不回送结果,即指令执行后,两个操作数都不变。它常用在要检测某些条件是否满足,但又不希望改变原有操作数的情况。紧跟在这条指令后面的往往是一条有条件转移指令,根据测试结果产生对应的分支,转去执行不同的程序段。该指令执行后影响标志位ZF、PF和SF,CF和OF置为0,AF无意义。2 2算术逻辑移位指令算术逻辑移位

    33、指令(Shift Arithmetic and Shift Logical)这类指令能够对寄存器或存储器中的字或字节操作数进行算术移位或逻辑移位,移动的次数由指令中的计数值指出。这类指令共有4条。SAL算术左移指令(Shift Arithmetic Left)格式:SAL 目的操作数,计数值 SHL逻辑左移指令(Shift Logic Left)格式:SHL 目的操作数,计数值 功能:这两条指令的功能完全相同,均将寄存器或存储器中的目的操作数左移若干位,每移一次,最低有效位补0,而最高有效位进入标志位CF。移动一次,相当于将目的操作数乘以2。指令中的计数值决定所要移位的次数。若只需要移位一次,

    34、可直接将指令中的计数值置l;若移位次数大于1,则应先将移位次数送进CL寄存器,再把CL放在指令的“计数值”位置上。在移位次数为1的情况下,如果移位后的最高位(符号位)的值被改变,则OF标志置1,表明有溢出,否则OF清0。但在多次移位的情况下,OF的值不确定。不论移一次或多次,CF总是等于目的操作数最后一次移到CF中的值。SF和ZF将根据指令执行后目的操作数的状态来决定,PF只有当目的操作数在AL中时才有效,AF无意义。SHR逻辑右移指令(Shift Logic Right)格式:SHR 目的操作数,计数值 功能:把目的操作数右移若干位,每执行一次移位操作,操作数右移一位,最低位进入CF,最高位

    35、补0。右移次数由计数值决定,同SAL/SHL指令一样。若目的操作数为无符号数,每右移一次,目的操作数相当于除以2。SAR算术右移指令(Shift Arithmetic Right)格式:SAR 目的,计数值 功能:把目的操作数右移若干位,每执行一次移位操作,操作数右移一位,最低位进入CF,最高符号位保持不变。每移一次,相当于对带符号数进行除2操作。移位次数同样有指令中的“计数值”决定。在这4条移位指令中,算术移位指令SAL和SAR用于有符号数,逻辑移位指令SHL和SAR用于无符号数。3 3循环移位指令循环移位指令 (Rotate)(Rotate)这类指令与上述指令具有相似性,能够对寄存器或存储

    36、器中的字或字节操作数进行循环移位操作,移动的次数由指令中的计数值指出,当移动1次时,计数值可以用立即数,当移位次数超过1时,计数值必须送CL。这类指令共有4条。ROL循环左移指令(Rotate Left)格式:ROL 目的操作数,计数值 功能:把目的操作数循环左移若干位,每左移一位,左移前的最高位送入最低位和进位位CF。移位次数有指令中的“计数值”决定。该指令影响CF和OF。ROR循环右移指令(Rotate Right)格式:ROR 目的操作数,计数值 功能:把目的操作数循环右移若干位,每右移一位,右移前的最低位送入最高位和进位位CF。移位次数有指令中的“计数值”决定。该指令影响CF和OF。R

    37、CL带进位位循环左移指令(Rotate through Carry Left)格式:RCL 目的操作数,计数值 功能:把目的操作数连同CF一起循环左移若干位,每左移一位,左移前的最高位进入进位位CF,左移前的CF进入最低位。移位次数有指令中的“计数值”决定。该指令影响CF和OF。RCR带进位位循环右移指令(Rotate through Carry Right)格式:RCR 目的操作数,计数值 功能:把目的操作数连同CF一起循环右移若干位,每右移一位,右移前的最低位进入进位位CF,右移前的CF进入最高位。移位次数有指令中的“计数值”决定。该指令影响CF和OF。3.2.4 3.2.4 串操作类指令

    38、串操作类指令 8086/8088提供5条1字节的字符串操作指令,专门对存储器中的字节串和字串数据进行传送、比较、扫描、存储及装入等5种操作。使用字符串操作指令时,可以有两种方法告诉汇编程序是进行字节操作还是字操作。1 1字符串操作类指令使用时必须遵守以下的隐含约定字符串操作类指令使用时必须遵守以下的隐含约定 目的串必须位于当前附加段中,即ES段,DI作为目的串所在的存储单元地址指针,即目的串字符的起始地址(或末地址)为ES:DI,但目的串不允许使用段超越前缀修改ES。如果要在同一段内进行串运算,必须使DS和ES指向同一段。源串位于当前数据段中,即DS段,SI作为源字符串所在的存储单元地址指针,

    39、即源串字符的起始地址(或末地址)为DS:SI,源字符串允许使用段超越前缀来修改段地址。每执行一次字符串指令,指针SI和DI会自动进行修改,以便指向下一个待操作的单元,即SI=SI1或SI=SI2,DI=DI1或DI=DI2,其修改形式由具体的指令和DF的值确定。标志寄存器中的方向标志位DF控制字符串操作时的地址变化方向。DF=0为递增方向,此时,DS:SI指向源字符串首地址,ES:DI指向目的字符串首地址。每执行一次串操作,使SI和DI增加,字节串操作时,SI、DI分别增1,字串操作时,SI和DI分别增2;DF1为递减方向,这时,DS:SI指向源字符串末地址,ES:DI指向目的字符串末地址。每

    40、执行一次串操作,使SI和DI分别减量,字节串操作时减1,字串操作时减2。可用标志位操作指令STD和CLD来改变DF的值,STD使DF置1,CLD将DF清0。字符串长度放在CX寄存器中,单位是字节或字数。为了加快串运算指令的执行速度,可在基本指令前加重复前缀,使数据串指令重复执行。重复次数事先送入CX中。每重复执行一次,地址指针SI和DI都根据方向标志自动进行修改,CX的值则自动减1。能与基本指令配合使用的 重复前缀有:REP 无条件重复 (Repeat)REPE/REPZ 相等/结果为零则重复(Repeat while Equal/Zero)REPNE/REPNZ 不相等/结果非零则重复(Re

    41、peat while Not Equal/NotZero)无条件重复前缀指令REP常与串传送指令连用,连续进行字符串传送操作,直到CX=0为止。重复前缀REPE和REPZ具有相同的含义,它们常与字符串比较指令连用,连续进行字符串比较操作。当ZF1且CX0时,则重复进行比较,直到ZF0或CX0为止。重复前缀REPNE和REPNZ也具有相同的意义,它们常与字符串扫描指令连用,当ZF0且CX0时,重复进行扫描,直到ZF=l或CX0为止。2 2字符串操作指令字符串操作指令 MOVS字符串传送指令(MoveString)格式:MOVS 目的字符串,源字符串 功能:把由SI作地址指针的源字符串中的一个字节

    42、或字,传送到由DI作地址指针的目的字符串中,且自动修改指针SI和DI。其中,MOVSB每次传送一个字节,MOVSW每次传送一个字。CMPS字符串比较指令(CompareString)格式:CMPS 目的字符串,源字符串 功能:将两个字符串中相应的元素逐个进行比较(即相减),相减后的结果反映在标志位上,但不改变两个数据串的原始值。同时,操作后源字符串和目的字符串指针自动修改,指向下一对待比较的元素。其中,CMPSB每次把两个字节数据相比较,CMPSW每次把两个字数据相比较。SCAS字符串扫描指令(Scan String)格式:SCAS 功能:把AL 或AX 的内容减去ES:DI为地址指针的字符串

    43、中的元素逐个进行比较,结果反映在标志位上,但不改变源操作数。同时,操作后目的串指针会自动修改,指向下一个待搜索的串数据。其中,SCASB指令使用AL作为被减数,SCASW使用AX作为被减数。LODS数据串装入指令(Load String)格式:LODS 功能:把以DS:SI作为地址指针的字符串中的元素逐个传送到AL 或AX 中,同时修改SI,使它指向字符串中的下一个数据。其中,LODSB指令使用AL作为目的操作数,LODSW使用AX为目的操作数。STOS数据串存储指令(Store String)格式:STOS 功能:将累加器AL或AX中的一个字节或字传送到附加段中以DI为地址指针的目的字符串中

    44、,同时修改DI,以指向串中的下一个数据。其中,STOSB指令使用AL源操作数,STOSW指令使用AX作为源操作数。3.2.5 3.2.5 控制转移类指令控制转移类指令 结构化程序设计由顺序结构、分支结构和循环结构三种。顺序程序中的指令按语句的顺序逐条执行的,在8086中,指令的执行顺序由CS和IP决定,每取出一条指令,指令指针IP自动进行调整,一条指令执行完后,就从该指令之后的下一个存储单元中取出新的指令来执行。利用控制转移指令可以改变CS和IP的值,从而改变指令的执行顺序。为满足程序转移的不同要求,8086提供了无条件转移、过程调用、条件转移、循环控制以及中断等几种类指令。1 1无条件转移无

    45、条件转移(Unconditional Transferl)格式:JMP 目的操作数 功能:使程序无条件地转移到指令中指定的目的地址去执行。这类指令又分 成三种类型:段内转移或近(NEAR)转移。转移指令的目的地址和JMP指令在同一代码段中,转移时仅改变IP的值,CS的值不变。指令格式为:JMP NEAR PTR 目的操作数,IP=IP16位的位移量。段间或远转移(FAR)。转移指令的目的地址和JMP指令不在同一段中,发生转移时,CS和IP的值都要改变,也就是说程序要转到另一代码段去执行。指令格式为:JMP FAR PTR 目的操作数,IP=IP16位的位移量,CS的值等于“目的操作数”所在的代

    46、码段的段地址。短转移(SHORT)。指令格式为:JMP SHORT 目的操作数。发生转移时,IP=IP8位的位移量,CS的值不变。不论是段内还是段间转移,就转移地址提供的方式而言,可分为两种 方式。一种方式是直接转移,在指令码中直接给出转移的目的地址,目的操作数用一个标号来表示。另一种方式是间接转移,转移的目的地址可以由寄存器或存储器间接给出。总之,这类指令的目的地址可以有寄存器、存储单元或标号给出,所以无条件转移指令可分成段内直接转移、段内间接转移、段间直接转移和段间间接转移四种不同类型。2 2过程调用和返回指令过程调用和返回指令(Call and Return)过程调用有近调用和远调用两种

    47、类型。近过程调用指调用指令CALL和被调用的过程在同一代码段中,远过程调用则是指两者不在同一代码段中。过程调用和返回指令的格式:CALL过程名RET CALL指令执行的过程:断点保护。把CALL指令下面那条指令的地址推入堆栈。对于近调用来说,执行的操作是SP=SP-2,IP入栈;对于远调用来说,执行的操作是SP=SP-2,CS入栈,SP=SP-2,IP入栈;转移。获得子程序的入口地址,转去执行相应的子程序。入口地址由CALL指令 的目的操作数提供。恢复断点(返回)。执行被调用过程中的RET指令后,从栈中弹出返回地址,使程序返回主程序的断点处继续执行程序。如果从近过程调用返回,则从栈中弹出一个字

    48、送IP,并且使SP=SP+2;如果从远过程调用返回,则先从栈中弹出一个字送IP,并且使SP=SP+2;再从栈中弹出一个字送CS,并使SP=SP+2。3 3条件转移指令条件转移指令(Conditional Transfer)条件转移指令是根据当前标志寄存器的状态标志作为转移条件来决定是否转移。每一种条件转移指令都有它的测试条件,当条件成立,就转移到指令所给出的目的地址处去执行那里的指令,否则,程序仍顺序执行。所有的条件转移均为段内短转移(转移指令与目的地址必须在同一代码段中)。目的地址由当前IP值与指令中给出的8位相对位移量相加而成,它与转移指令之后的那条指令间的距离,允许为-128127字节。

    49、8位偏移量是用符号扩展法扩展到16位后才与IP相加的。4 4循环控制指令循环控制指令(Iteration Control)LOOP循环指令(Loop)格式:LOOP 标号功能:当CX0时,循环执行标号与该指令之间的一段程序在循环体的外面,必须把循环体执行的次数事先送入CX。该指令执行的过程是:CXCX-1;判断CX0?若CX0,则执行循环体,否则,结束该循环体的执行,执行LOOP指令的下一条指令。LOOPE/LOOPZ循环指令(Loop If Equal/Zero)格式:LOOPE 标号 或 LOOPZ 标号功能:当CX0且ZF1时,循环执行标号与该指令之间的一段程序。在循环体的外面,必须把循

    50、环体执行的次数事先送入CX。该指令执行的过程是:CXCX-1;判断CX0且ZF=1?若CX0且ZF=1,则执行循环体;若CX=0或ZF0,则执行LOOP指令的下一条指令,结束该循环体的执行。LOOPNE/LOOPNZ循环指令(Loop If NotEqual/NotZero)格式:LOOPNE 标号 或 LOOPNZ 标号功能:当CX0且ZF0时,循环执行标号与该指令之间的一段程序。在循环体的外面,必须把循环体执行的次数事先送入CX。该指令执行的过程是:CXCX1;判断CX0且ZF=0?若CX0且ZF=0,则执行循环体;若CX=0或ZF1,则执行LOOP指令的下一条指令,结束该循环体的执行。J

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:微机原理与接口技术第3章-8086课件.ppt
    链接地址:https://www.163wenku.com/p-3146395.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库