好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

微处理器及指令系统.ppt

276页
  • 卖家[上传人]:鲁**
  • 文档编号:590378522
  • 上传时间:2024-09-14
  • 文档格式:PPT
  • 文档大小:4.04MB
  • / 276 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 微机原理与控制技术微机原理与控制技术 卢晓红卢晓红 第二章:第二章:x86 微处理器微处理器1 第二章:第二章: x86x86微处理器微处理器2.1 8086/8088微处理器微处理器2.2 8086/8088存储器和存储器和I/O组织组织2.3 8086/8088中断系统中断系统2.4 8086/8088指令系统指令系统2.5 x86系列系列CPU的技术发展的技术发展2 2 §8086/80888086/8088微处理器的结构微处理器的结构 §80868086微处理器的结构微处理器的结构 §8086/80888086/8088微处理器的寄存器结构微处理器的寄存器结构§8086/80888086/8088系统中的存储器分段与物理地址的形成系统中的存储器分段与物理地址的形成 §8086/80888086/8088微处理器的引脚功能和相关知识,达到微处理器的引脚功能和相关知识,达到““综合应用综合应用””层次 §8086/8088 CPU8086/8088 CPU的引脚信号和工作模式的引脚信号和工作模式 §8086/80888086/8088两种工作方式两种工作方式————最小方式与最大方式的区别。

      最小方式与最大方式的区别 §最小模式的典型配置最小模式的典型配置§8086/80888086/8088微处理器的总线时序微处理器的总线时序 §三种周期三种周期————指令周期、总线周期和时钟周期的区别及联系指令周期、总线周期和时钟周期的区别及联系 §中断类型码,中断向量,中断子程序入口地址之间的联系中断类型码,中断向量,中断子程序入口地址之间的联系§最小方式下的总线读最小方式下的总线读/ /写操作时序,最小方式下的总线请求写操作时序,最小方式下的总线请求/ /保持保持§三态三态2.1 8086/80882.1 8086/8088微处理器微处理器本本 节节 要要 点点3 3 8086/80888086/8088微处理器是微处理器是IntelIntel公司推出的第三代公司推出的第三代CPUCPU芯片,它芯片,它们的内部结构基本相同,都采用们的内部结构基本相同,都采用1616位结构进行操作及存储器位结构进行操作及存储器寻址,但外部性能有所差异,两种处理器都封装在相同的寻址,但外部性能有所差异,两种处理器都封装在相同的4040脚双列直插组件中脚双列直插组件中n2.1.0 80862.1.0 8086与与808880882.1 8086/80882.1 8086/8088微处理器微处理器4 4 2.1 8086/80882.1 8086/8088微处理器微处理器要了解一个要了解一个CPUCPU的工作性能和使用方法的工作性能和使用方法, ,首先应该了解其功能结构首先应该了解其功能结构( (是指从是指从程序员和使用者的角度看到的结构,亦可称为编程结构程序员和使用者的角度看到的结构,亦可称为编程结构) )。

      从功能上从功能上来看,来看,8086CPU8086CPU可分为两部分,即可分为两部分,即总线接口部件总线接口部件BIUBIU((Bus Interface Bus Interface UnitUnit)和)和执行部件执行部件EUEU((Execution UnitExecution Unit)• n2.1.1 80862.1.1 8086与与80888088微处理器的编程结构微处理器的编程结构5 5 2.1 8086/80882.1 8086/8088微处理器微处理器n总线接口部件(总线接口部件(BIUBIU))总线接口单元总线接口单元BIUBIU的功能是负责完成的功能是负责完成CPUCPU与存储器或与存储器或I/OI/O设设备之间的数据传送具体任务是:备之间的数据传送具体任务是:① ① 指令队列出现空字节(指令队列出现空字节(8088CPU 18088CPU 1个空字节,个空字节,8086CPU28086CPU2个空字节个空字节) )时,从内存取出后续指令时,从内存取出后续指令BIUBIU取指令时,取指令时,并不影响并不影响EUEU的执行,两者并行工作,大大提高了的执行,两者并行工作,大大提高了CPUCPU的的执行速度。

      执行速度② ② EUEU需要从内存或外设端口读取操作数时,根据需要从内存或外设端口读取操作数时,根据EUEU给出给出的地址从内存或外设端口读取数据供的地址从内存或外设端口读取数据供EUEU使用③ ③ EUEU的运算结果、数据或控制命令等由的运算结果、数据或控制命令等由BIUBIU送往指定的内送往指定的内存单元或外设端口存单元或外设端口6 6 2.1 8086/80882.1 8086/8088微处理器微处理器n总线接口部件的组成总线接口部件的组成Ø4 4个个1616位段寄存器:位段寄存器:包括代码段寄存器包括代码段寄存器CS (Code Segment)CS (Code Segment)、数据段寄存器、数据段寄存器DSDS((Data Segment)Data Segment)、、堆栈段寄存器堆栈段寄存器SS (Stack Segment)SS (Stack Segment)和附加和附加数据段寄存器数据段寄存器ES ES (Extra (Extra Segment)Segment);;Ø1 1个个1616位的指令指针寄存器位的指令指针寄存器IP IP (Instruction Pointer)(Instruction Pointer);;Ø1 1个个2020位地址加法器;位地址加法器;Ø6 6字节指令队列缓冲器;字节指令队列缓冲器;Ø1 1个与个与EUEU通讯的内部寄存器;通讯的内部寄存器;Ø总线控制电路等。

      总线控制电路等7 7 2.1 8086/80882.1 8086/8088微处理器微处理器n段寄存器段寄存器Ø8086CPU8086CPU的地址引脚有的地址引脚有2020根根,能提供,能提供2020位的地址信息,可直接对位的地址信息,可直接对1M1M个个存储单元进行访问,但存储单元进行访问,但CPUCPU内部可用来提供地址信息的寄存器都是内部可用来提供地址信息的寄存器都是1616位的位的,为了用,为了用1616位寄存器实现位寄存器实现2020位地址的寻址,位地址的寻址,8086/80888086/8088采用了段采用了段结构的内存管理的方法结构的内存管理的方法Ø将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,这些段的段地址分别由段寄存器中,这些段的段地址分别由段寄存器CSCS、、DSDS、、SSSS、、ESES提供,而代码或提供,而代码或数据在段内的偏移地址则由有关寄存器或立即数给出数据在段内的偏移地址则由有关寄存器或立即数给出8 8 2.1 8086/80882.1 8086/8088微处理器微处理器Ø代码段寄存器代码段寄存器CSCS存储程序当前使用的代码段的段地址。

      代码段用存储程序当前使用的代码段的段地址代码段用来存放程序的指令代码下一条要读取指令在代码段中的偏移地来存放程序的指令代码下一条要读取指令在代码段中的偏移地址由指令指针寄存器址由指令指针寄存器IPIP提供;提供;Ø数据段寄存器数据段寄存器DSDS用来存放程序当前使用的数据段的段地址一般用来存放程序当前使用的数据段的段地址一般来说,程序中所用到的原始数据、中间结果以及最终结果都存放来说,程序中所用到的原始数据、中间结果以及最终结果都存放在数据段中,如果程序中使用了字符串处理指令,则源字符串也在数据段中,如果程序中使用了字符串处理指令,则源字符串也存放在数据段中;存放在数据段中;Ø堆栈段寄存器堆栈段寄存器SSSS用来存放程序当前所使用的堆栈段的段地址堆用来存放程序当前所使用的堆栈段的段地址堆栈是在存储器中开辟的一个特定区域;栈是在存储器中开辟的一个特定区域;Ø附加数据段寄存器附加数据段寄存器ESES用来存放程序当前使用的附加数据段的段地用来存放程序当前使用的附加数据段的段地址附加数据段通常用于存放字符串操作时的目的字符串附加数据段通常用于存放字符串操作时的目的字符串n段寄存器段寄存器9 9 2.1 8086/80882.1 8086/8088微处理器微处理器n段寄存器段寄存器8086/80888086/8088段寄存器与提供段内偏移地址的寄存器之间的默认组合段寄存器与提供段内偏移地址的寄存器之间的默认组合段寄存器段寄存器提供段内偏移地址的寄存器提供段内偏移地址的寄存器CSCSIPIPDSDSBXBX、、SISI、、DIDI或一个或一个1616位数位数SSSSSPSP或或BPBPESESDI(DI(用于字符串操作指令用于字符串操作指令) )1010 2.1 8086/80882.1 8086/8088微处理器微处理器n指令指针寄存器指令指针寄存器IPIPØ指令指针寄存器指令指针寄存器IPIP用来存放下一条要读取的指令在代用来存放下一条要读取的指令在代码段中的偏移地址。

      码段中的偏移地址IPIP在程序运行中能自动加在程序运行中能自动加1 1修正,修正,从而使其始终存放的是下一条要读取的指令在代码段从而使其始终存放的是下一条要读取的指令在代码段的偏移地址的偏移地址Ø由于由于CSCS和和IPIP的内容决定了程序的执行顺序,因此程序的内容决定了程序的执行顺序,因此程序员员不能直接用赋值指令不能直接用赋值指令对其内容进行修改对其内容进行修改Ø有些指令能使有些指令能使IPIP和和CSCS的值改变(如跳转指令)或使其的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢复原值(如子程序调用值压入堆栈或从堆栈中弹出恢复原值(如子程序调用指令和返回指令指令和返回指令)1111 2.1 8086/80882.1 8086/8088微处理器微处理器n2020位地址加法器位地址加法器Ø8086/80888086/8088系统中存储器按字节编址,可寻址系统中存储器按字节编址,可寻址1M1M字节,由于字节,由于1M1M字节是字节是2 2的的2020次方,因此,每个字节所对应的地址应是次方,因此,每个字节所对应的地址应是2020位,这位,这2020位的地址称为位的地址称为物理地址物理地址/ /绝对地址,物理地址由逻辑地址变换而来绝对地址,物理地址由逻辑地址变换而来 ;逻辑地址由段基;逻辑地址由段基址和偏移地址两部分构成,段基址和偏移地址都是无符号的址和偏移地址两部分构成,段基址和偏移地址都是无符号的1616位二进制位二进制数。

      段基址存放在段寄存器中,偏移地址存放在数段基址存放在段寄存器中,偏移地址存放在IPIP或者或者SPSP中ØCPUCPU提供的用来对存储单元进行访问的提供的用来对存储单元进行访问的2020位地址是由位地址是由BIUBIU中的地址加法中的地址加法器产生的器产生的物理地址物理地址=段基址段基址X16+偏移地址偏移地址例如:例如:CS=2000H,指令指针寄存器,指令指针寄存器存放的是偏移地址存放的是偏移地址IP=2200H,存储器的物理地址为,存储器的物理地址为20000H+2200H=22200H1212 2.1 8086/80882.1 8086/8088微处理器微处理器n指令队列缓冲器指令队列缓冲器Ø80868086的指令队列有的指令队列有6 6个字节个字节,,80888088的指令队列有的指令队列有4 4个字节个字节对80868086而言,而言,当指令队列出现当指令队列出现2 2个空字节,对个空字节,对80888088而言,指令队列出现而言,指令队列出现1 1个空字节时,个空字节时,BIUBIU就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列。

      它们采用指令队列它们采用““先进先出先进先出””原则,按顺序存放,并按顺序取到原则,按顺序存放,并按顺序取到EUEU中中去执行Ø当当EUEU执行一条需要到存储器或执行一条需要到存储器或I/OI/O端口读取操作数的指令时,端口读取操作数的指令时,BIUBIU将在将在执行完现行取指令的存储器周期后的下一个存储周期,对指令所指定的存执行完现行取指令的存储器周期后的下一个存储周期,对指令所指定的存储单元或储单元或I/OI/O端口进行访问,读取的操作数经端口进行访问,读取的操作数经BIUBIU送送EUEU进行处理进行处理Ø当当EUEU执行跳转、子程序调用或返回指令时,执行跳转、子程序调用或返回指令时,BIUBIU就使指令队列复位,就使指令队列复位,并从指令给出的新地址开始取指令,新取的第并从指令给出的新地址开始取指令,新取的第1 1条指令直接经指令队列送条指令直接经指令队列送EUEU执行,随后取来的指令将填入指令队列缓冲器执行,随后取来的指令将填入指令队列缓冲器1313 2.1 8086/80882.1 8086/8088微处理器微处理器§BIUBIU和和EUEU的动作协调原则的动作协调原则BIUBIU和和EUEU按以下流水线技术原则协调工作,共同完成所要求的任务:按以下流水线技术原则协调工作,共同完成所要求的任务:①①每当每当80868086的指令队列中有两个空字节,的指令队列中有两个空字节,BIUBIU就会自动把指令取到指令队就会自动把指令取到指令队列中。

      其取指的顺序是按指令在程序中出现的前后顺序其取指的顺序是按指令在程序中出现的前后顺序②②每当每当EUEU准备执行一条指令时,它会从准备执行一条指令时,它会从BIUBIU部件的指令队列前部取出指令部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令在执行指令的过程中,如果的代码,然后用几个时钟周期去执行指令在执行指令的过程中,如果必须访问存储器或者必须访问存储器或者I I//O O端口,那么端口,那么EUEU就会请求就会请求BIUBIU,进入总线周期,完,进入总线周期,完成访问内存或者成访问内存或者I I//O O端口的操作;如果此时端口的操作;如果此时BIUBIU正好处于空闲状态,会立正好处于空闲状态,会立即响应即响应EUEU的总线请求如的总线请求如BIUBIU正将某个指令字节取到指令队列中,则正将某个指令字节取到指令队列中,则BIUBIU将首先完成这个取指令的总线周期,然后再去响应将首先完成这个取指令的总线周期,然后再去响应EUEU发出的访问总线的发出的访问总线的请求③③当指令队列已满,且当指令队列已满,且EUEU又没有总线访问请求时,又没有总线访问请求时,BIUBIU便进入空闲状态。

      便进入空闲状态④④在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,生了变化,则指令队列中已经装入的字节被自动消除,BIUBIU会接着往指令会接着往指令队列装入转向的另一程序段中的指令代码队列装入转向的另一程序段中的指令代码1414 2.1 8086/80882.1 8086/8088微处理器微处理器§BIU和和EU的动作协调原则的动作协调原则Ø指令队列的引入使得指令队列的引入使得EUEU和和BIUBIU可并行工作,即可并行工作,即BIUBIU在读指令时,并不影响在读指令时,并不影响EUEU单元单元执行指令,执行指令,EUEU单元可以连续不断地直接从指令队列中取到要执行的指令代码,从单元可以连续不断地直接从指令队列中取到要执行的指令代码,从而减少了而减少了CPUCPU为取指令而等待的时间,提高了为取指令而等待的时间,提高了CPUCPU的利用率,加快了整机的运行速的利用率,加快了整机的运行速度Ø指令队列可以被看成是一个特殊的指令队列可以被看成是一个特殊的RAMRAM,它的工作原理是,它的工作原理是““先进先出先进先出””,写入,写入的指令只能存放在队列尾,读出的指令是队列头存放的指令。

      的指令只能存放在队列尾,读出的指令是队列头存放的指令EUEU和和BIUBIU之间就是之间就是通过指令队列协调工作通过指令队列协调工作1515 2.1 8086/80882.1 8086/8088微处理器微处理器n执行单元执行单元EUEU执行单元执行单元EUEU不与系统外部直接相连,它的功能只是负责执行指令不与系统外部直接相连,它的功能只是负责执行指令执行执行的指令从的指令从BIUBIU的指令队列缓冲器中直接得到,执行指令时若需要从存储器的指令队列缓冲器中直接得到,执行指令时若需要从存储器或或I/OI/O端口读取操作数时,由端口读取操作数时,由EUEU向向BIUBIU发出请求,再由发出请求,再由BIUBIU对存储器或对存储器或I/OI/O端口进行访问端口进行访问EUEU由下列部件组成:由下列部件组成:1 1)) 1616位算术逻辑单元位算术逻辑单元(ALU)(ALU)::进行算进行算术和逻辑运算;术和逻辑运算;2 2)) 1616位标志寄存器(位标志寄存器(FRFR))FLAGSFLAGS:存:存放运算的状态特征和控制标志;放运算的状态特征和控制标志;3 3))数据暂存寄存器:数据暂存寄存器:协助协助ALUALU完成运完成运算,暂存参加运算的数据;算,暂存参加运算的数据;1616 4 4))四个通用寄存器:四个通用寄存器:4 4个个1616位数位数据寄存器(据寄存器(AXAX、、BXBX、、CXCX、、DXDX))5 5)四个专用寄存器,)四个专用寄存器,即基数指针即基数指针寄存器寄存器BPBP,堆栈指针寄存器,堆栈指针寄存器SPSP,,源变址寄存器源变址寄存器SISI,目的变址寄存,目的变址寄存器器DIDI;;6 6)) EUEU控制电路控制电路:控制、定时与:控制、定时与状态逻辑电路,接收从状态逻辑电路,接收从BIUBIU指令队指令队列取来的指令,经过指令译码形列取来的指令,经过指令译码形成各种定时控制信号,对成各种定时控制信号,对EUEU的各的各个部件实现特定的定时操作个部件实现特定的定时操作. .2.1 8086/80882.1 8086/8088微处理器微处理器1717 2.1 8086/80882.1 8086/8088微处理器微处理器n通用寄存器通用寄存器AXAX、、BXBX、、CXCX、、DXDXØ数据寄存器一般用于存放参与运算的操作数或运算结果。

      数据寄存器一般用于存放参与运算的操作数或运算结果每个数据寄存器都是每个数据寄存器都是1616位的,但又可将高、低位的,但又可将高、低8 8位分别作位分别作为两个独立的为两个独立的8 8位寄存器来用高位寄存器来用高8 8位分别记作位分别记作AHAH、、BHBH、、CHCH、、DHDH,低,低8 8位分别记作位分别记作ALAL,,BLBL,,CLCL,,DLDL例如AXAX可当作两个可当作两个8 8位寄存器位寄存器AHAH、、ALAL使用Ø8086/8088 CPU8086/8088 CPU的的1414个寄存器除了这个寄存器除了这4 4个个1616位寄存器能分位寄存器能分别当作两个别当作两个8 8位寄存器来用之外,其它寄存器都不能如此位寄存器来用之外,其它寄存器都不能如此使用1818 2.1 8086/80882.1 8086/8088微处理器微处理器n通用寄存器通用寄存器AXAX、、BXBX、、CXCX、、DXDX寄存器寄存器用用 途途AXAXAX (Accumulator)AX (Accumulator)称为累加器用该寄存器存放运算结果可使指令称为累加器。

      用该寄存器存放运算结果可使指令简化,提高指令的执行速度此外,简化,提高指令的执行速度此外,所有的所有的I/OI/O指令都使用该寄存器指令都使用该寄存器与外设端口交换信息与外设端口交换信息 AL:AL:字字节乘,字乘,字节除,字除,字节I/OI/O,十,十进制算制算术运算;运算;AHAH:字:字节乘,字乘,字节除除BXBXBX (Base)BX (Base)称为基址寄存器称为基址寄存器8086/8088CPU8086/8088CPU中有两个基址寄存器中有两个基址寄存器BXBX和和BPBPBXBX用来存放操作数在内存中数据段内的偏移地址,用来存放操作数在内存中数据段内的偏移地址,BPBP用来存放用来存放操作数在堆栈段内的偏移地址操作数在堆栈段内的偏移地址CXCXCX (Counter)CX (Counter)称为计数器在设计循环程序时使用该寄存器存放循称为计数器在设计循环程序时使用该寄存器存放循环次数环次数CLCL变量移位,循量移位,循环控制控制DXDXDX (Data)DX (Data)称为数据寄存器在称为数据寄存器在寄存器间接寻址的寄存器间接寻址的I/OI/O指令中存放指令中存放I/OI/O端口地址端口地址;在做双字长乘除法运算时,;在做双字长乘除法运算时,DXDX与与AXAX一起存放一个双字长一起存放一个双字长操作数,其中操作数,其中DXDX存放高存放高1616位数。

      位数1919 2.1 8086/80882.1 8086/8088微处理器微处理器MOV AL,41H;OUT DX,AL;MUL 50H;AL*50H->AXMUL 2030H; AX*2030H->DX(h),AX(l)DIV SRC; AX/SRC; (AL)←AX/SRC; (AL)←商商; (AH)←; (AH)←余余 (AX)←(DX:AX)/(src) (AX)←(DX:AX)/(src)的的商商 ( (字除法字除法) ) (DX)←(DX:AX)/(src) (DX)←(DX:AX)/(src)的余数的余数LOOP;LOOP;ROR AX,CLROR AX,CL2020 2.1 8086/80882.1 8086/8088微处理器微处理器n地址指针寄存器地址指针寄存器SPSP、、BPBPØSP (Stack Pointer)SP (Stack Pointer)称为堆栈指针寄存器称为堆栈指针寄存器在使用堆栈操作指令在使用堆栈操作指令(PUSH(PUSH或或POP)POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将自动将SPSP的内容减的内容减2 2或加或加2 2,以使其始终指向栈顶。

      以使其始终指向栈顶ØBP (Base Pointer)BP (Base Pointer)称为基址寄存器称为基址寄存器作为通用寄存器可以用来存放作为通用寄存器可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址n变址寄存器变址寄存器SISI、、DIDIØSI (Source Index)SI (Source Index)称为源变址寄存器称为源变址寄存器ØDI (Destination Index)DI (Destination Index)称为目的变址寄存器称为目的变址寄存器Ø通常用在字符串操作时存放操作数的偏移地址,其中通常用在字符串操作时存放操作数的偏移地址,其中SISI存放源串在数存放源串在数据段内的偏移地址,据段内的偏移地址,DIDI存放目的串在附加数据段内的偏移地址存放目的串在附加数据段内的偏移地址2121 2.1 8086/80882.1 8086/8088微处理器微处理器n标志寄存器(标志寄存器(FRFR))FLAGSFLAGSØFLAGSFLAGS称为标志寄存器,为一个称为标志寄存器,为一个1616位的寄存器,但只用了其中位的寄存器,但只用了其中9 9位,包括位,包括6 6个状态标志位,个状态标志位,3 3个控制标志位。

      个控制标志位Ø状态标志位:状态标志位:用来反映算术和逻辑运算结果的一些特征如结果是否为用来反映算术和逻辑运算结果的一些特征如结果是否为““0”0”,是否有进位、借位、溢出等不同指令对状态标志位的影响是不同,是否有进位、借位、溢出等不同指令对状态标志位的影响是不同的Ø控制标志位控制标志位:用来控制:用来控制CPUCPU的操作,由程序设置或清除的操作,由程序设置或清除CFCFPFPFAFAFZFZFSFSFTFTFIFIFDFDFOFOF0 01 12 23 34 45 56 67 78 89 9101011111212131314141515控制标志位:控制标志位:TFTF、、IFIF、、DFDF状态标志位:状态标志位:CFCF、、PFPF、、AFAF、、ZFZF、、SFSF、、OFOF2222 2.1 8086/80882.1 8086/8088微处理器微处理器CFCFPFPFAFAFZFZFSFSFTFTFIFIFDFDFOFOF0 01 12 23 34 45 56 67 78 89 9101011111212131314141515名称名称符号符号功能功能进位标志进位标志CFCF做加法时最高位出现进位或做减法时最高位出现借位,该位置做加法时最高位出现进位或做减法时最高位出现借位,该位置1 1,反,反之为之为0 0,用来判断无符号数是否溢出。

      用来判断无符号数是否溢出奇偶标志奇偶标志PFPF运算结果的低运算结果的低8 8位中位中1 1的个数为偶数时,则该位置的个数为偶数时,则该位置1 1,反之为,反之为0 0辅助进位标志辅助进位标志AFAF加法时第加法时第3 3位往第位往第4 4位有进位,或者减法时,第位有进位,或者减法时,第3 3位往第位往第4 4位有借位一位有借位一般在般在BCDBCD码运算中作为是否进行十进制调整的判据码运算中作为是否进行十进制调整的判据零标志零标志ZFZF运算结果为运算结果为0 0时,该标志位置时,该标志位置1 1,否则清,否则清0 0符号标志符号标志SFSF与运算结果的最高位相同,当数据用补码表示时,负数的最高位为与运算结果的最高位相同,当数据用补码表示时,负数的最高位为1 1,所以,,所以,SFSF表示运算结果是正还是负表示运算结果是正还是负跟踪标志跟踪标志TFTF当该位置当该位置1 1时,进入单步工作方式,通常用于程序的调试时,进入单步工作方式,通常用于程序的调试中断标志中断标志IFIF若用若用STISTI指令将该位置指令将该位置1 1,则,则CPUCPU可以响应从可以响应从INTRINTR引脚引入的可屏蔽中引脚引入的可屏蔽中断请求;若用断请求;若用CLICLI指令将指令将IFIF清清0 0,则禁止,则禁止CPUCPU接受可屏蔽中断请求信号;接受可屏蔽中断请求信号;IFIF的状态对非屏蔽中断及内部中断没有影响。

      的状态对非屏蔽中断及内部中断没有影响方向标志方向标志DFDF若该位用若该位用STDSTD置置1 1,则串操作指令的地址不断减值;反之,若该位用,则串操作指令的地址不断减值;反之,若该位用CLDCLD清零,则串操作指令的地址不断增值清零,则串操作指令的地址不断增值溢出标志溢出标志OFOF运算结果是否超出了运算结果是否超出了8 8位(位(-128~127-128~127)或)或1616位(位(-32768~32767-32768~32767)带符)带符号数所能表达的范围,溢出为号数所能表达的范围,溢出为1 1,用来判断带符号数是否溢出用来判断带符号数是否溢出2323 2.1 8086/80882.1 8086/8088微处理器微处理器n例(标志寄存器)例(标志寄存器)例A:设变量x=11101111B,y=11001000B,问执行x+y 操作后标志寄存器中各状态位的状态如何? 11101111+) 11001000自动丢失1 10110111BF=1CF=1状态位状态位执行执行x x+ +y y后后CFCF 高高 位位 向向 前前 有有 进位,进位,CF=1CF=1PFPF低低8 8位中位中1 1的个数为偶数的个数为偶数(6)(6),,PF=1PF=1AFAF低低4 4 位向前有进位,位向前有进位,AF=1AF=1ZFZF 计算结果不为计算结果不为 0 0 ,,ZF=0ZF=0SFSF最高位为最高位为1 1,,SF=1SF=1OFOFCF CF ⊕⊕ BF=0 BF=0,没,没 有有 溢出,溢出,OF=0OF=0异或2424 2.1 8086/80882.1 8086/8088微处理器微处理器例B:设变量X=0B,Y=B,问执行X+Y 操作后标志寄存器中各状态位的状态如何?n例(标志寄存器)例(标志寄存器)2525 2.1 8086/80882.1 8086/8088微处理器微处理器8086/80888086/8088寄寄存器结构存器结构2626 2.1 8086/80882.1 8086/8088微处理器微处理器n8088CPU与8086CPU的异同8088CPU8088CPU内部结构与内部结构与80868086基本相似,两者的执行单元基本相似,两者的执行单元EUEU完全相同,其指完全相同,其指令系统,寻址方式及程序设计方法都相同,所以两种令系统,寻址方式及程序设计方法都相同,所以两种CPUCPU完全兼容。

      完全兼容8088CPU8088CPU与与8086CPU8086CPU区别仅在于总线接口单元区别仅在于总线接口单元BIUBIU,归纳起来主要,归纳起来主要差异如下:差异如下:1)外部数据总线位数不同8086外部数据总线16位,在一个总线周期内可以输入/输出一个字(16位数据),而8088外部数据总线8位,在一个总线周期内只能输入/输出一个字节(8位数据)2)指令队列缓冲器大小不同8086指令队列可容纳6个字节,且在每一个总线周期中从存储器取出2个字节的指令代码填入指令队列;而8088指令队列只能容纳4个字节,在一个机器周期中取出一个字节的指令代码送指令队列3)部分引脚的功能定义有所区别2727 2.1 8086/80882.1 8086/8088微处理器微处理器n2.1.2 80862.1.2 8086总线周期概念总线周期概念8086/8088CPU在与存储器或I/O端口交换数据时需要启动一个总线周期按照数据的传送方向来分,总线周期可分为“读”总线周期(CPU从存储器或I/O端口读取数据)和“写”总线周期(CPU将数据写入存储器或I/O端口)8086CPU8086CPU基本的总线周期由基本的总线周期由4 4个时钟周期组成个时钟周期组成Ø时钟周期时钟周期是是CPUCPU的基本时间计量单位,由的基本时间计量单位,由CPUCPU主频决定,如主频决定,如80868086的主频的主频为为5MHz5MHz,,1 1个时钟周期就是个时钟周期就是200ns200ns。

      Ø一个时钟周期又称为一个一个时钟周期又称为一个T T状态,因此基本总线周期用状态,因此基本总线周期用T1T1、、T2T2、、T3T3、、T4T4表示Ø在在T1T1状态状态CPUCPU把要读把要读/ /写的存储单元的地址或写的存储单元的地址或I/OI/O端口的地址放到地址端口的地址放到地址总线上2828 2.1 8086/80882.1 8086/8088微处理器微处理器n2.1.2 80862.1.2 8086总线周期概念总线周期概念Ø若是若是““写写””总线周期总线周期,,CPUCPU从从T2T2起到起到T4T4,把数据送到,把数据送到总线上,并写入存储器单元或总线上,并写入存储器单元或I/OI/O端口;端口;Ø若是若是““读读””总线周期总线周期,,CPUCPU则从则从T3T3起到起到T4T4从总线上接从总线上接收数据,收数据,T2T2状态时总线浮空,允许状态时总线浮空,允许CPUCPU有个缓冲时间把有个缓冲时间把输出地址的写方式转换成输入数据的读方式输出地址的写方式转换成输入数据的读方式2929 2.1 8086/80882.1 8086/8088微处理器微处理器§指令周期:指令周期:一条指令从其代码被从内存单元中取出到其所规定的操作执一条指令从其代码被从内存单元中取出到其所规定的操作执行完毕,所用的时间,称为相应指令的指令周期。

      行完毕,所用的时间,称为相应指令的指令周期 §总线周期总线周期::是指是指CPU与存储器或外设进行一次数据传送所需要的时间与存储器或外设进行一次数据传送所需要的时间§时钟周期:时钟周期:又称为又称为T状态,是一个时钟脉冲的重复周期,是状态,是一个时钟脉冲的重复周期,是CPU处理动处理动作的基本时间单位它是由主频来确定,如作的基本时间单位它是由主频来确定,如8086的主频为的主频为5MHz,则一,则一个时钟周期为个时钟周期为200ns§等待周期等待周期::是在一个总线周期的是在一个总线周期的T3和和T4之间,之间,CPU根据根据Ready信号来确信号来确定是否插入定是否插入TW,插入几个,插入几个TW§空闲周期:空闲周期:是指在二个总线周期之间的时间间隔是指在二个总线周期之间的时间间隔(总线处在空闲状态总线处在空闲状态)若为若为3个时钟周期,则空闲周期为个时钟周期,则空闲周期为3个个Ti§时钟周期时钟周期(T)作为基本时间单位,一个等待周期作为基本时间单位,一个等待周期TW=T;一个空闲周期;一个空闲周期Ti=T;一个总线周期通常由四个;一个总线周期通常由四个T组成,分别称为组成,分别称为T1T2 T3 T4 ;一个指令;一个指令周期由一到几个总线周期组成。

      周期由一到几个总线周期组成n2.1.2 80862.1.2 8086总线周期概念总线周期概念3030 2.1 8086/80882.1 8086/8088微处理器微处理器具有空闲状态的总线周期具有空闲状态的总线周期T1状态,发地址信息;状态,发地址信息;T2状态,总线的高状态,总线的高4位输出状态信息;位输出状态信息;T3状态,高状态,高4位状态信息,低位状态信息,低16位数据信息;位数据信息;T3之后,可能插入之后,可能插入TW;;在在T4状态,结束状态,结束只有在只有在CPUCPU和内存或和内存或I/OI/O接口之间传输数据,以及填充指令队列时,接口之间传输数据,以及填充指令队列时,CPUCPU才执行总才执行总线周期可见,如果在一个总线周期之后,不立即执行下一个总线周期,即可见,如果在一个总线周期之后,不立即执行下一个总线周期,即CPU此时执行的指令不需要对存储器或此时执行的指令不需要对存储器或I/O端口进行访问,且目前指令队列满而不需要端口进行访问,且目前指令队列满而不需要到内存中读指令,那么系统总线就处于空闲状态,,执行空闲周期到内存中读指令,那么系统总线就处于空闲状态,,执行空闲周期TI。

      3131 2.1 8086/80882.1 8086/8088微处理器微处理器n总线空闲周期的状态总线空闲周期的状态Ø在空闲周期中可包括一个或多个时钟周期,在这期间,在高在空闲周期中可包括一个或多个时钟周期,在这期间,在高4 4位的总位的总线上,线上,CPUCPU仍驱动前一个总线周期的状态信息;而在低仍驱动前一个总线周期的状态信息;而在低1616位的总线上,位的总线上,则根据前一个总线周期是读还是写周期来决定则根据前一个总线周期是读还是写周期来决定1 1)若前一个周期为写周期,)若前一个周期为写周期,CPUCPU会在总线的低会在总线的低1616位继续驱动数位继续驱动数据信息;据信息;2 2)若前一个总线周期为读周期,)若前一个总线周期为读周期,CPUCPU则使总线的低则使总线的低1616位处于浮位处于浮空状态Ø在空闲周期,尽管在空闲周期,尽管CPUCPU对总线进行空操作对总线进行空操作,但在,但在CPUCPU内部,仍然进行着内部,仍然进行着有效的操作,如执行某个运算、在内部寄存器之间传送数据等有效的操作,如执行某个运算、在内部寄存器之间传送数据等3232 2.1 8086/80882.1 8086/8088微处理器微处理器n具有等待状态的总线周期具有等待状态的总线周期Ø在总线周期的在总线周期的T3T3状态结束之前,状态结束之前,CPUCPU测试测试READYREADY信号线,如果为有效的信号线,如果为有效的高电平,则说明数据已准备好,可进入高电平,则说明数据已准备好,可进入T4T4状态;若状态;若READYREADY为低电平,为低电平,则说明数据没有准备好,则说明数据没有准备好,CPUCPU在在T3T3之后插入之后插入1 1个或多个等待周期个或多个等待周期T TW W,直,直到检测到到检测到READYREADY为有效高电平后,为有效高电平后,CPUCPU会自动脱离会自动脱离T TW W而进入而进入T4T4状态。

      状态Ø通过这种延长总线周期的措施允许系统使用低速的存储器芯片通过这种延长总线周期的措施允许系统使用低速的存储器芯片3333 2.1 8086/80882.1 8086/8088微处理器微处理器n2.1.3 8086/80882.1.3 8086/8088引脚信号及其功能引脚信号及其功能3434 2.1 8086/80882.1 8086/8088微处理器微处理器n2.1.3 8086/80882.1.3 8086/8088引脚信号及其功能引脚信号及其功能8086CPU12345678910111213141516171819204039383736353433323130292827262524232221GNDAD14AD13AD12AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCC(+5 V)AD15A16 /S 3A17 /S 4A18 /S 5A19 /S 6BHE / S7MN / MXRDHOLD(RQ / GT0 )HLDA(RQ / GT1)WR (LOCK )M / IO(S2 )DT / R(S1)DEN(S0 )ALE(QS 0 )INTA(QS1)TESTREADYRESET8088CPU12345678910111213141516171819204039383736353433323130292827262524232221GNDA14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCC(+5 V)A15A16 /S 3A17 /S 4A18 /S 5A19 /S 6SS 0 /( HIGH )MN / MXRDHOLD(RQ / GT0 )HLDA(RQ / GT1 )WR (LOCK )IO / M (S2 )DT / R(S1)DEN(S0 )ALE(QS 0 )INTA(QS1 )TESTREADYRESET3535 2.1 8086/80882.1 8086/8088微处理器微处理器n8086/80888086/8088芯片的引脚包括芯片的引脚包括2020根地址线,根地址线,1616根根(8086)(8086)或或8 8根根(8088)(8088)数数据线以及控制线、状态线、电源线和地线等据线以及控制线、状态线、电源线和地线等; ;n若每个引脚只传送一种信息,那么芯片的引脚将会太多,不利于芯若每个引脚只传送一种信息,那么芯片的引脚将会太多,不利于芯片的封装,因此,片的封装,因此,8086/8088CPU8086/8088CPU的部分引脚定义了双重功能。

      的部分引脚定义了双重功能 例如:例如:Ø第第3333引脚引脚MN/-MXMN/-MX上电平的高低决定上电平的高低决定CPUCPU两种不同的工作方式两种不同的工作方式(最大工作方式和最小工作方式),而第(最大工作方式和最小工作方式),而第3131到到2424引脚在引脚在CPUCPU两两种不同的工作方式时具有不同的名称和定义;种不同的工作方式时具有不同的名称和定义;Ø引脚引脚9 9到到1616((8088CPU8088CPU)及引脚)及引脚2 2到到1616和和3939((8086CPU8086CPU)采用了)采用了地址地址/ /数据分时复用技术,即在不同的时刻分别传送地址或数数据分时复用技术,即在不同的时刻分别传送地址或数据信息等据信息等n8086CPU8086CPU引脚按功能可分为三大类:电源线和地线,地址引脚按功能可分为三大类:电源线和地线,地址/ /数据数据引脚以及控制引脚引脚以及控制引脚3636 2.1 8086/80882.1 8086/8088微处理器微处理器n电源线和地线电源线和地线电源线电源线VCCVCC第第40引脚,输入,接入单一引脚,输入,接入单一+5V电源电源。

      地线地线GNDGND引脚引脚1和和20,输入,两条地线均应接地输入,两条地线均应接地3737 2.1 8086/80882.1 8086/8088微处理器微处理器n地址地址/ /数据数据( (状态状态) )引脚引脚302地址地址/数据分时复用引脚数据分时复用引脚AD15~AD0((Address/Data))引脚39及引脚2~16,传送地址时单向输出,传送数据时双向输入或输出分时输出 低16位地址信号及进行数据信号的输入/输出地址地址/状态分时复用引脚状态分时复用引脚A19/S6∼ ∼A16/S3((Address /Status))引脚35∼38,输出、三态总线,采用分时输出,即在T1状态作地址线用,T2∼T4状态输出状态信息当访问存储器时,T1状态输出A19∼A15,与AD15∼AD0一起构成访问存储器的20位物理地址;CPU访问I/O端口时,不使用这4个引脚,A19∼A16保持为03838 2.1 8086/80882.1 8086/8088微处理器微处理器n地址地址/ /数据数据( (状态状态) )引脚引脚302状态信息:状态信息:ØS6,为,为0用来表示用来表示8086CPU 当前与总线相连,所以在当前与总线相连,所以在T2∼ ∼T4状态,状态,S6总为总为0,以表示,以表示CPU当前连在总线上;当前连在总线上;ØS5,表示中断允许标志位,表示中断允许标志位IF的当前设置,的当前设置,IF=1时,时,S5为为1,否则为,否则为0;;ØS4∼ ∼S3,用来指示当前正在使用哪个段寄存器。

      用来指示当前正在使用哪个段寄存器S S4S S3当前正在使用的段寄存器当前正在使用的段寄存器0 00 01 11 10 01 10 01 1ESESSSSSCSCS或未使用任何段寄存器或未使用任何段寄存器DSDS3939 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚302NMI (Non-Maskable Interrupt )INTR (Interrupt Request) :Ø引脚引脚17,非屏蔽中断请求信号,输入,上升沿触发非屏蔽中断请求信号,输入,上升沿触发Ø此请求不受标志寄存器此请求不受标志寄存器FLAGS中中断允许标志位中中断允许标志位IF状态的影响,状态的影响,只要此信号一出现,在当前指令执行结束后立即进行中断处理只要此信号一出现,在当前指令执行结束后立即进行中断处理Ø引脚引脚18,可屏蔽中断请求信号,输入,高电平有效,可屏蔽中断请求信号,输入,高电平有效ØCPU在每个指令周期的最后一个时钟周期检测该信号是否有效,在每个指令周期的最后一个时钟周期检测该信号是否有效,若此信号有效,表明有外设提出了中断请求,这时若若此信号有效,表明有外设提出了中断请求,这时若IF=1,则当,则当前指令执行完后立即响应中断;若前指令执行完后立即响应中断;若IF=0,则中断被屏蔽,外设发,则中断被屏蔽,外设发出的中断请求将不被响应。

      程序员可通过指令出的中断请求将不被响应程序员可通过指令STI或或CLI将将IF标志标志位置位置1或清零4040 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚302CLK (Clock)Ø引脚引脚19,系统时钟,系统时钟Ø时钟信号输入引脚,时钟信号的方波信号,占空比约为时钟信号输入引脚,时钟信号的方波信号,占空比约为33%,即,即1/3周期为高电平,周期为高电平,2/3周期为低电平周期为低电平RESETØ引脚引脚21,复位信号输入引脚,高电平有效;,复位信号输入引脚,高电平有效;Ø复位信号使处理器马上结束现行操作,对内部寄存器进行初始化复位信号使处理器马上结束现行操作,对内部寄存器进行初始化Ø8086/8088要求复位脉冲宽度不得小于要求复位脉冲宽度不得小于4个时钟周期个时钟周期Ø复位后,内部寄存器处于初始默认状态复位后,内部寄存器处于初始默认状态内部寄存器内部寄存器状状 态态标志寄存器标志寄存器IPCSDSSSES指令队列缓冲器指令队列缓冲器其余寄存器其余寄存器0000H0000HFFFFH0000H0000H0000H空空0000H4141 2.1 8086/80882.1 8086/8088微处理器微处理器302READYØ引脚引脚22,数据,数据“准备好准备好(就绪就绪)”信号线,输入引脚。

      是所寻址的信号线,输入引脚是所寻址的存储存储器或器或I/O端口发来的数据准备就绪信号,高电平有端口发来的数据准备就绪信号,高电平有效该信号是协调该信号是协调CPUCPU与内存单元或与内存单元或I/OI/O端口之间进行信息传送的联络信号端口之间进行信息传送的联络信号ØCPU在每个总在每个总线周期的线周期的T3状态对状态对READY引脚采样,若为高电平,说引脚采样,若为高电平,说明数据已准备明数据已准备好;若为低电平,说明数据还没好;若为低电平,说明数据还没有准备好,有准备好,CPU在在T3状状态之后自动插入一个或几个等待状态之后自动插入一个或几个等待状态态TW,直到,直到READY变为高电平,才变为高电平,才能进入能进入T4状态,完成数据传送过程,从而结束当前总线周期状态,完成数据传送过程,从而结束当前总线周期TESTØ引脚引脚2323,等待测试信号,,等待测试信号,输入引脚,低电平有效输入引脚,低电平有效Ø当当CPUCPU执行执行WAITWAIT指令时,每隔指令时,每隔5 5个时钟周期对个时钟周期对 -TEST -TEST 引引脚进行一次测脚进行一次测试若为高电平,试若为高电平,CPUCPU就仍处于空转状态进就仍处于空转状态进行等待,直到行等待,直到 -TEST -TEST 引脚引脚变为低电平,变为低电平,CPUCPU结束等待状结束等待状态,执行下一条指令,以使态,执行下一条指令,以使CPUCPU与外部硬与外部硬件同步。

      件同步n控制引脚控制引脚4242 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚30-RD (Read)Ø引脚引脚3232,读控制信号,输出,读控制信号,输出Ø当当 -RD =0-RD =0时,表示将要执行一个对存储器或时,表示将要执行一个对存储器或 I/O I/O 端口的读操作到底是端口的读操作到底是从存储单元还是从从存储单元还是从 I/O I/O 端口读取数据,取决于端口读取数据,取决于M/-IO (8086)M/-IO (8086)或或IO/-M IO/-M (8088)(8088)信号BHE/S7(Bus High Enable / Status)Ø引脚引脚3434,高,高8 8位数据总线允许位数据总线允许/ /状态复用引脚,输出状态复用引脚,输出Ø在总线周期的在总线周期的T T1 1状态时输出状态时输出-BHE -BHE ,当该引脚输出为低电平时,表示当前数据,当该引脚输出为低电平时,表示当前数据总线上高总线上高8 8位数据有效该位数据有效该引脚和地址引脚引脚和地址引脚A A0 0配合表示当前数据总线的使用情配合表示当前数据总线的使用情况。

      况Ø在总线周期的在总线周期的T T2 2及其以后的状态时,输出状态信号及其以后的状态时,输出状态信号S S7 7 BHEA0数据总线的使用情况数据总线的使用情况0011010116位字传送位字传送(偶地址开始的两个存储器单元的内容偶地址开始的两个存储器单元的内容)在数据总线高在数据总线高8位位(D15∼ ∼D8)和奇地址单元间进行字节传送和奇地址单元间进行字节传送在数据在数据总线低总线低8位位(D7∼ ∼D0)和偶地址单元间进行字节传送和偶地址单元间进行字节传送无效无效8088的的34引脚引脚定义为定义为-SS0,,用来与用来与28脚脚-M/IO和和27脚脚DT/-R组合,决组合,决定当前总线周定当前总线周期的操作期的操作4343 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚30Ø引脚引脚3333,最小,最小/ /最大方式控制信号,输入最大方式控制信号,输入ØMN/-MXMN/-MX引脚接高电平时,引脚接高电平时,8086/8088 CPU8086/8088 CPU工作在最小方式,在此方式下,全工作在最小方式,在此方式下,全部控制信号由部控制信号由CPUCPU提供;提供;ØMN/-MXMN/-MX引脚接低电平时,引脚接低电平时,8086/80888086/8088工作在最大方式,这时,工作在最大方式,这时,CPUCPU发出的控制发出的控制信号经信号经82888288总线控制器进行变换和组合,从而使总线的控制功能更加完善。

      总线控制器进行变换和组合,从而使总线的控制功能更加完善Ø第第24~3124~31引脚的功能定义在最小方式下和最大方式下是不同的引脚的功能定义在最小方式下和最大方式下是不同的MN/-MX (Minimum/Maximum mode control)引脚引脚 最小方式下的定义最小方式下的定义最大方式下的定义最大方式下的定义24242525262627272828292930303131-INTA-INTA,中断响应信号,中断响应信号ALEALE,地址锁存允许信号,地址锁存允许信号-DEN-DEN,数据允许信号,数据允许信号DT/-RDT/-R,数据发送,数据发送/ /接收信号接收信号M/-IOM/-IO,存储器,存储器I/OI/O端口控制信号端口控制信号-WR-WR,写信号,写信号HLDAHLDA,总线保持响应信号,总线保持响应信号HOLDHOLD,总线保持请求信号,总线保持请求信号QSQS1 1,指令队列状态信号,指令队列状态信号1 1QSQS0 0,指令队列状态信号,指令队列状态信号0 0S S2 2,总线周期状态信号,总线周期状态信号2 2S S1 1,总线周期状态信号,总线周期状态信号1 1S S0 0,总线周期状态信号,总线周期状态信号0 0-LOCK-LOCK,总线封锁信号,总线封锁信号-RQ/-GT-RQ/-GT1 1,总线请求,总线请求/ /允许信号允许信号1 1-RQ/-GT-RQ/-GT0 0,总线请求,总线请求/ /允许信号允许信号0 04444 2.1 8086/80882.1 8086/8088微处理器微处理器30n控制引脚控制引脚-INTA (Interrupt Acknowledge)1))最小方式引脚最小方式引脚24,中断响应信号,输出;,中断响应信号,输出;2 2)用于对外设的中断请求)用于对外设的中断请求(经经INTR引脚送入引脚送入CPU)作出响应。

      作出响应3 3))- -INTA实际上是两个连续的负脉冲信号实际上是两个连续的负脉冲信号,第一个负脉冲通,第一个负脉冲通知外设接口,它发出的中断请求已被允许;外设接口接到知外设接口,它发出的中断请求已被允许;外设接口接到第第2个负脉冲后,将个负脉冲后,将中断类型号中断类型号放到数据总线上,以便放到数据总线上,以便CPU根据中断类型号到内存的中断向量表中找出对应中断根据中断类型号到内存的中断向量表中找出对应中断的中断服务程序入口地址,从而转去执行中断服务程序的中断服务程序入口地址,从而转去执行中断服务程序ALE (Address Latch Enable)1))最小方式引脚最小方式引脚25,地址锁存允许信号,输出;,地址锁存允许信号,输出;2 2)是)是8086/8088提供给地址锁存器的控制信号,高电平有提供给地址锁存器的控制信号,高电平有效在任何一个总线周期的在任何一个总线周期的T1状态,状态,ALE均为高电平均为高电平,以,以表示当前地址表示当前地址/数据复用总线上输出的是地址信息,数据复用总线上输出的是地址信息,ALE由高到低的下降沿把地址由高到低的下降沿把地址装入地址锁存器中装入地址锁存器中。

      4545 2.1 8086/80882.1 8086/8088微处理器微处理器n中断向量和中断向量表中断向量和中断向量表0 0段的段的0000-03FFH0000-03FFH区域设置为一个中断向量表区域设置为一个中断向量表每个中断向量占每个中断向量占4 4个存个存储单元其中,其中,前两个单元存放中断子程序入口地址的偏移量(前两个单元存放中断子程序入口地址的偏移量(IPIP)),,低位在前,高位在后;后两个单元存放中断子程序入口地址的段地址低位在前,高位在后;后两个单元存放中断子程序入口地址的段地址((CSCS),也是低位在前,高位在后),也是低位在前,高位在后例如:例如:类型号为类型号为17H17H的中断处理子程序存放在的中断处理子程序存放在23452345::7890H7890H开始的内存区域中开始的内存区域中而而17H17H中断对应的中断向量存放在中断对应的中断向量存放在00000000::005CH005CH处,所以,处,所以,0 0段段005CH005CH、、005DH005DH、、005EH005EH和和005FH005FH这这4 4个单元中的数值分别为:个单元中的数值分别为:90H90H、、78H78H、、45H45H及及23H23H。

      17H=23D23D*4=92D92D=5CHCS:IP= 2345::7890H90H78H45H23HcsIP005CH005DH005EH005FH4646 2.1 8086/80882.1 8086/8088微处理器微处理器30n控制引脚控制引脚-DEN (Data Enable)::1)最小方式引脚最小方式引脚2626,数据允许信号,输出;,数据允许信号,输出;2 2)当使用数据总线收发器时)当使用数据总线收发器时( (例如使用例如使用8286/8287)8286/8287),该信号为收,该信号为收发器的发器的OEOE端提供了一个控制信号,用于决定是否允许数据通过数据总端提供了一个控制信号,用于决定是否允许数据通过数据总线收发器线收发器DEN-DEN为高电平时,收发器在收或发两个方向上都不能传送为高电平时,收发器在收或发两个方向上都不能传送数据,当数据,当-DEN-DEN为低电平时,允许数据通过数据总线收发器为低电平时,允许数据通过数据总线收发器DT/-R (Data Transmit/Receive):1 1)最小方式引脚)最小方式引脚2727,数据发送,数据发送/ /接收信号,输出;接收信号,输出;2 2)用来控制数据的传送方向。

      当其为高电平时,)用来控制数据的传送方向当其为高电平时,8086 CPU8086 CPU通过通过数据总线收发器进行数据发送;当其为低电平时,则进行数据接收数据总线收发器进行数据发送;当其为低电平时,则进行数据接收在在DMADMA方式,它被浮置为高阻状态方式,它被浮置为高阻状态4747 2.1 8086/80882.1 8086/8088微处理器微处理器30n控制引脚控制引脚M/-IO (Memory/Input and Output)::1)最小方式引脚最小方式引脚2828,存储器,存储器/I/O/I/O端口控制信号,输出;端口控制信号,输出;2 2)用来区分)用来区分CPUCPU是进行存储器访问还是是进行存储器访问还是I/OI/O端口访问当其为高电平端口访问当其为高电平时,表示时,表示CPUCPU正在和存储器进行数据传送;如为低电平,表明正在和存储器进行数据传送;如为低电平,表明CPUCPU正在和正在和输入输入/ /输出设备进行数据传送在输出设备进行数据传送在DMADMA方式,该引脚被浮置为高阻状态方式,该引脚被浮置为高阻状态WR (Write):1 1)最小方式引脚)最小方式引脚2929,写信号,输出;,写信号,输出;2 2))-WR-WR有效时,表示有效时,表示CPUCPU当前正在进行存储器或当前正在进行存储器或I/OI/O写操作,到底是哪写操作,到底是哪一种写操作,取决于一种写操作,取决于M/-IOM/-IO信号。

      在信号在DMADMA方方式,该引脚被浮置为高式,该引脚被浮置为高阻状态8088的的28脚脚不是不是M/-IO而而是是-M/IO4848 2.1 8086/80882.1 8086/8088微处理器微处理器30n控制引脚控制引脚HOLD (Hold request)::1)1)最小方式引脚最小方式引脚31,总线保持请求信号,输入;,总线保持请求信号,输入;2 2)当)当8086/8088 CPU之外的总线主设备要求占用总线时,通之外的总线主设备要求占用总线时,通过该引脚向过该引脚向CPU发一个高电平的总线保持请求信号发一个高电平的总线保持请求信号HLDA (Hold Acknowledge)::1 1))最小方式引脚最小方式引脚30,总线保持响应信号,输出;,总线保持响应信号,输出;2 2)当)当CPU接收到接收到HOLD信号后,这时如果信号后,这时如果CPU允许让出总允许让出总线,就在当前总线周期完成时,线,就在当前总线周期完成时,在在T4状态发出高电平有效状态发出高电平有效的的HLDA信号给以响应信号给以响应此时,CPU让出总线使用权,发让出总线使用权,发出出HOLD请求的总线主设备获得总线的控制权。

      请求的总线主设备获得总线的控制权DMA操操作时使用该信号作时使用该信号)4949 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚30QS1、QS0 (Instruction Queue Status)1))最大方式最大方式引脚引脚24、、25指令队列状态信号,输出;指令队列状态信号,输出;2 2))QS1、、QS0两个信号电平的不同组合指明了两个信号电平的不同组合指明了8086/8088内内部指令队列的状态,其代码组合对应的含义如下页表所部指令队列的状态,其代码组合对应的含义如下页表所示QS1QS0含含 义义00无操作无操作01从指令队列的第一字节中取走代码从指令队列的第一字节中取走代码10队列为空队列为空11除第一字节外,还取走了后续字节中的代码除第一字节外,还取走了后续字节中的代码5050 2.1 8086/80882.1 8086/8088微处理器微处理器n控制引脚控制引脚30-S2、、-S1、、-S0 (Bus Cycle Status)1))最大方式引脚最大方式引脚26、、27、、28,总线周期状态信号,输出;,总线周期状态信号,输出;2 2)低电平有效的三个状态信号)低电平有效的三个状态信号,被连接到总线控制器被连接到总线控制器8288的的输入端,输入端,8288对这些信号进行译码后产生内存及对这些信号进行译码后产生内存及I/O端口端口的读写控制信号。

      的读写控制信号S2-S1-S08288产生的控制信号产生的控制信号对应操作对应操作000-INTA发中断响应信号发中断响应信号001-IORC读读I/OI/O端口端口010-IOWC和和-AIOWC写写I/OI/O端口端口011无无暂停暂停100-WRDC取指令取指令101-WRDC读内存读内存110-MWTC和和-AMWC写内存写内存111无无无源状态无源状态5151 2.1 8086/80882.1 8086/8088微处理器微处理器30n控制引脚控制引脚-LOCK (Lock):1)最大方式引脚最大方式引脚29,总线封锁信号,输出;,总线封锁信号,输出;2 2)当)当- -LOCK为低电平时,系统中其他总线主设备就不能获得为低电平时,系统中其他总线主设备就不能获得总线的控制权而占用总线总线的控制权而占用总线3 3))-LOCK信号由指令前缀信号由指令前缀LOCK产生,产生,-LOCK指令后面的一指令后面的一条指令执行完后,便撤消了条指令执行完后,便撤消了LOCK信号8086两个中断响两个中断响应脉冲之间,应脉冲之间,/LOCK信号有效信号有效4 4)在)在DMA期间,期间,/LOCK被浮空而处于高阻状态被浮空而处于高阻状态。

      RQ/-GT1、-RQ/-GT0 (Request/Grant)1))最大方式引脚最大方式引脚30、、31,总线请求信号,总线请求信号(输入输入)/总线请求允许总线请求允许信号信号(输出输出)2))可供可供8086/8088以外的以外的2个总线主设备向个总线主设备向8086/8088发出使发出使用总线的请求信号用总线的请求信号RQ(相当于最小方式时的相当于最小方式时的HOLD信号信号)而而8086/8088在现行总线周期结束后让出总线,发出总线在现行总线周期结束后让出总线,发出总线请求允许信号请求允许信号GT(相当于最小方式的相当于最小方式的HLDA信号信号),此时,,此时,外部总线主设备便获得了总线的控制权其中外部总线主设备便获得了总线的控制权其中-RQ /-GT0比比-RQ /-GT1的优先级高的优先级高5252 2.1 8086/80882.1 8086/8088微处理器微处理器302.1.4 最小模式和最大模式最小模式和最大模式最小模式和最大模式的概念最小模式和最大模式的概念Ø最小模式:最小模式:在计算机系统中只有在计算机系统中只有80868086或或80888088一个一个 微处理器;微处理器;Ø最大模式:最大模式:在中等规模或大型的在中等规模或大型的8086/80888086/8088计算机系计算机系统中,总是包含有两个或多个微处理器。

      其中一个主处理统中,总是包含有两个或多个微处理器其中一个主处理器就是器就是80888088或或80868086,其他的处理器称为协处理器其他的处理器称为协处理器8087:数值运算协处理器;:数值运算协处理器;8089:输入输出协处理器输入输出协处理器5353 2.1 8086/80882.1 8086/8088微处理器微处理器308086最小模式最小模式当当MN/-MXMN/-MX接高电平(接高电平(+5V+5V)时,系统工作于最小模)时,系统工作于最小模式,适用于小规模的微机系统式,适用于小规模的微机系统~MN / MXVCC(+5 V)CLKREADYRESETALEBHEA19 /S6A16 /S3AD15 /AD0VCC数据收发器8286(2片)STB地址锁存器8282(3片)OE地址总线AB8086 CPUDENDT / RM / IOINTRINTARDWRHOLDHLDA数据总线DB控制总线CB8284A时钟发生器RDY最小模式下的典型配置等待状态等待状态产生器产生器 1 1片片8284A8284A作为时钟发生作为时钟发生器,器,3 3片片82828282用作地址用作地址锁存器;锁存器;2 2片片82868286作为作为总线收发器,增加数据总线收发器,增加数据总线的驱动能力。

      总线的驱动能力地址锁存器地址锁存器82828282::8 8位的,位的,而而80868086系统采用系统采用2020位地位地址址 STBSTB是其选通端是其选通端OEOE为输出允许为输出允许产生恒定时产生恒定时钟;对准备钟;对准备信号和复位信号和复位信号同步信号同步82868286是是8 8位的,位的,80868086用用2 2片;片;80888088用用1 1片5454 2.1 8086/80882.1 8086/8088微处理器微处理器308086最大模式最大模式当当MN/-MXMN/-MX接低电平时,系统工作于最大方接低电平时,系统工作于最大方式,即多处理器方式式,即多处理器方式~~DENS1S 28086 CPU++5 VCLKREADYRESETA16 /S3AD15 /AD08284A时钟发生器时钟发生器VCC等待状态等待状态产生器产生器地址锁存器地址锁存器8282(3片片)数据收发器数据收发器8286(2片片)OE地址总线地址总线AB数据总线数据总线DB控制总线控制总线CBS0S1S 28288总线总线控制器控制器S0CLKCENAENIOBMRDCMWTCAMWCIORCIOWCAIOWCINTASTBBHEA19 /S61TOEMN / MXDT / RALE最大模式下,以最大模式下,以CPUCPU为核心的多处为核心的多处理器控制系统共理器控制系统共用一条外部总线,用一条外部总线,因此需要增加因此需要增加总总线控制器线控制器82888288完完成多处理器的分成多处理器的分时控制。

      时控制82868286是是8 8位的,位的,80868086用用2 2片;片;80888088用两片T T:引脚用来控制:引脚用来控制数据传输方向数据传输方向三个状态信号三个状态信号5555 2.1 8086/80882.1 8086/8088微处理器微处理器302.1.4 最小模式和最大模式最小模式和最大模式比较最大方式和最小方式系统结构图可以发现,最比较最大方式和最小方式系统结构图可以发现,最大方式和最小方式有关地址总线和数据总线的电路大方式和最小方式有关地址总线和数据总线的电路部分基本相同,即都部分基本相同,即都需要地址锁存器及数据总线收需要地址锁存器及数据总线收发器发器而控制总线的电路部分有很大差别而控制总线的电路部分有很大差别1 1)在最小工作方式下,控制信号可直接从)在最小工作方式下,控制信号可直接从8086/8088 CPU8086/8088 CPU得得到,不需要外加电路到,不需要外加电路2 2)最大方式是多处理器工作方式,需要协调主处理器和协)最大方式是多处理器工作方式,需要协调主处理器和协处理器的工作因此,处理器的工作因此,8086/80888086/8088的部分引脚需要重新定义,的部分引脚需要重新定义,控制信号不能直接从控制信号不能直接从8086/8088 CPU8086/8088 CPU引脚得到,需要外加引脚得到,需要外加82888288总线控制器总线控制器,通过它对,通过它对CPUCPU发出的控制信号发出的控制信号(-S0,-S1,-(-S0,-S1,-S2)S2)进行变换和组合,以得到对存储器和进行变换和组合,以得到对存储器和I/OI/O端口的读写控制端口的读写控制信号和对地址锁存器信号和对地址锁存器82828282及对总线收发器及对总线收发器82868286的控制信号,的控制信号,使总线的控制功能更加完善。

      使总线的控制功能更加完善5656 2.1 8086/80882.1 8086/8088微处理器微处理器302.1.5 8086的操作和时序的操作和时序8086CPU8086CPU的主要操作的主要操作1 1)系统的复位和启动操作)系统的复位和启动操作2 2)暂停操作)暂停操作3 3)总线操作)总线操作4 4)中断操作)中断操作5 5)最小方式下的总线保持)最小方式下的总线保持6 6)最大方式下的总线请求)最大方式下的总线请求/ /允许允许5757 2.1 8086/80882.1 8086/8088微处理器微处理器n系统的复位和启动操作系统的复位和启动操作复位后内部寄存器初值复位后内部寄存器初值寄存器寄存器值值标志寄存器标志寄存器指令指针指令指针CSCS寄存器寄存器DSDS寄存器寄存器SSSS寄存器寄存器ESES寄存器寄存器指令队列指令队列其他寄存器其他寄存器清零清零0000H0000HFFFFHFFFFH0000H0000H0000H0000H0000H0000H空空0000H0000HØ复位动作由复位动作由RESETRESET引脚上的引脚上的触发信号来执行;触发信号来执行;Ø动作时间,要求上电初次为动作时间,要求上电初次为至少至少50us50us,其它为,其它为4 4个以上个以上时钟周期时钟周期(10ns) (10ns) 的高电平;的高电平;Ø复位后,复位后,CPUCPU就被启动恢复就被启动恢复正常工作,即从正常工作,即从FFFF0HFFFF0H处开处开始执行程序。

      始执行程序CS=FFFFH;IP=0000H)当当RESETRESET接受到高电平之后的第一个时钟接受到高电平之后的第一个时钟周的正跳变,周的正跳变,80868086进入内部进入内部resetreset阶段,阶段,再过一个时钟周,所有三态输出线设置再过一个时钟周,所有三态输出线设置成高阻状态成高阻状态5858 2.1 8086/80882.1 8086/8088微处理器微处理器n总线操作总线操作CPU与存储器、与存储器、I/O端口进行数据读写过程,称为总线操端口进行数据读写过程,称为总线操作,作,8086CPU有以下五种总线操作:有以下五种总线操作:((1 1)最小方式下的总线读操作;)最小方式下的总线读操作;((2 2)最小方式下的总线写操作;)最小方式下的总线写操作;((3 3)最大方式下的总线读操作;)最大方式下的总线读操作;((4 4)最大方式下的总线写操作;)最大方式下的总线写操作;((5 5)总线空操作)总线空操作5959 2.1 8086/80882.1 8086/8088微处理器微处理器最小方式下的总线读操作时序最小方式下的总线读操作时序一个基本的读操作周期包含四个状态,有时候一个基本的读操作周期包含四个状态,有时候外设速度较慢时,插入一个或几个等待状态。

      外设速度较慢时,插入一个或几个等待状态当系统中有数据总线收发器时,要用到DT/-R和-DEN作为控制信号前者数据传输方向;后者实现选通6060 2.1 8086/80882.1 8086/8088微处理器微处理器最小方式下的总线写操作时序最小方式下的总线写操作时序数据输出6161 2.1 8086/80882.1 8086/8088微处理器微处理器最大方式下的总线读操作最大方式下的总线读操作6262 2.1 8086/80882.1 8086/8088微处理器微处理器最大方式下的总线写操作最大方式下的总线写操作6363 2.1 8086/80882.1 8086/8088微处理器微处理器n中断操作和中断系统中断操作和中断系统1 1))80868086可以处理可以处理256256个不同的中断,每个对应一个类个不同的中断,每个对应一个类型码型码0 0~~255255;;2 2))80868086的中断分为硬件中断和软件中断两种;的中断分为硬件中断和软件中断两种;3 3)硬件中断是通过外部硬件产生的,所以,也常把)硬件中断是通过外部硬件产生的,所以,也常把硬件中断称为外部中断。

      硬件中断称为外部中断硬件中断分为两类:硬件中断分为两类:1 1)外)外部引脚部引脚NMINMI引起的非屏蔽中断;引起的非屏蔽中断;2 2)引脚)引脚INTRINTR引起的引起的可屏蔽中断可屏蔽中断4 4)软件中断是由)软件中断是由CPUCPU内部根据指令或软件设置产生的,内部根据指令或软件设置产生的,也称为内部中断,如除数为也称为内部中断,如除数为““0”0”中断等8086的中断分类的中断分类6464 非屏蔽中断请求非屏蔽中断请求INT 2NMI(17号引脚号引脚)中断逻辑中断逻辑硬件硬件( (外部外部) )中断中断软件软件( (内部内部) )中断中断可屏蔽中断请求可屏蔽中断请求中断类型号中断类型号32~255INTR(18号引脚号引脚)中断指令中断指令INT nN=32~255溢出中断溢出中断INTOINT 4断点断点中断中断INT 3单步中断单步中断(TF=1)INT 1除法除法错误错误INT 0n中断分类中断分类&IF6565 2.1 8086/80882.1 8086/8088微处理器微处理器n中断向量和中断向量表中断向量和中断向量表Ø中断向量中断向量:中断服务子程序的入口地址,每个中断类型对应一个中断向量:中断服务子程序的入口地址,每个中断类型对应一个中断向量Ø中断向量表:中断向量表:存放存放256个中断向量的内存区域,位于内存个中断向量的内存区域,位于内存0段的段的0000~~03FFH空间(空间(1K Byte))6666 2.1 8086/80882.1 8086/8088微处理器微处理器n中断向量和中断向量表中断向量和中断向量表0 0段的段的0000-03FFH0000-03FFH区域设置为一个中断向量表。

      区域设置为一个中断向量表每个中断向量占每个中断向量占4 4个存个存储单元其中,其中,前两个单元存放中断子程序入口地址的偏移量(前两个单元存放中断子程序入口地址的偏移量(IPIP)),,低位在前,高位在后;后两个单元存放中断子程序入口地址的段地址低位在前,高位在后;后两个单元存放中断子程序入口地址的段地址((CSCS),也是低位在前,高位在后),也是低位在前,高位在后例如:例如:类型号为类型号为17H17H的中断处理子程序入口地址(的中断处理子程序入口地址(23452345::7890H7890H))而17H17H中中断对应的中断向量存放在断对应的中断向量存放在00000000::005CH005CH处,所以,处,所以,0 0段段005CH005CH、、005DH005DH、、005EH005EH和和005FH005FH这这4 4个单元中的数值分别为:个单元中的数值分别为:90H90H、、78H78H、、45H45H及及23H23H17H=23D23D*4=92D92D=5CHCS:IP= 2345::7890H90H78H45H23HcsIP005CH005DH005EH005FH存放的内容是存放的内容是CSCS::IPIP(入口地址)(入口地址)6767 2.1 8086/80882.1 8086/8088微处理器微处理器可屏蔽硬件中断可屏蔽硬件中断 -INTR-INTR的响应的响应Ø给出第一个给出第一个 -INTA-INTA,回应,回应 –INTR–INTR;;Ø给出第二个给出第二个 -INTA-INTA,从数据总线上读取中断类型码;,从数据总线上读取中断类型码;Ø将标志寄存器的值推入堆栈;将标志寄存器的值推入堆栈;Ø把标志寄存器的中断允许标志把标志寄存器的中断允许标志IFIF和跟踪标志和跟踪标志TFTF清零;清零;Ø将断点保存到堆栈中;将断点保存到堆栈中;Ø根据开始时得到的中断类型码,到中断向量表中找到中断向量根据开始时得到的中断类型码,到中断向量表中找到中断向量,,再根据中再根据中断向量转入相应的中断服务子程序;断向量转入相应的中断服务子程序;执行两个中断响应总线周期,中间间隔2~3个空闲状态,在第二个总线周期,通过低8位数据线接收中断类型码。

      断点概念:断点概念:响应中断时响应中断时候,主程序当前指令下候,主程序当前指令下面的一条指令的地址面的一条指令的地址6868 2.1 8086/80882.1 8086/8088微处理器微处理器不可屏蔽硬件中断不可屏蔽硬件中断NMINMI(掉电)(掉电)Ø中断类型码固定为2(中断处理子程序入口地址存放在0000段的0008H、0009H、000AH、000BH这四个单元),不需要另外提供类型码软件中断软件中断Ø通过中断指令使CPU执行中断服务子程序的方法;Ø用一条指令进入中断服务子程序,中断类型码由指令提供Ø进入中断时,不需要执行中断响应总线周期Ø不受中断允许标志IF的影响Ø中断服务子程序执行过程中可以响应其他中断Ø软件中断没有随机性断点概念:断点概念:响应中断时候,主程序当前指令下面的一条指令的地址响应中断时候,主程序当前指令下面的一条指令的地址6969 2.1 8086/80882.1 8086/8088微处理器微处理器n最小方式下的总线保持最小方式下的总线保持8086CPU8086CPU通过两个信号通过两个信号HOLD/HLDAHOLD/HLDA的输入的输入/ /输出配合,出让系统总线的输出配合,出让系统总线的控制权。

      控制权每个时钟周期的上升沿,每个时钟周期的上升沿,CPUCPU对对HOLDHOLD引脚信号检测,如果是高电平且允许出让总线,引脚信号检测,如果是高电平且允许出让总线,那么在那么在T TI I或或T T4 4之后的下一个时钟周期,之后的下一个时钟周期,CPUCPU发发HLDAHLDA信号直到发总线请求的设备将信号直到发总线请求的设备将HOLDHOLD变为低电平,变为低电平,CPUCPU才收回总线控制权出让总线后,地址才收回总线控制权出让总线后,地址/ /数据线、地址数据线、地址/ /状态线、图状态线、图示控制信号引脚处于浮空不过,示控制信号引脚处于浮空不过,ALEALE信号引脚不浮空信号引脚不浮空7070 2.1 8086/80882.1 8086/8088微处理器微处理器n最大方式下的总线请求最大方式下的总线请求/允许允许Ø最大方式下总线控制信号不再是最大方式下总线控制信号不再是HOLDHOLD、、HDLAHDLA,而是将这两个引脚变成,而是将这两个引脚变成功能更加完善的两个双向信号引脚功能更加完善的两个双向信号引脚-RQ/-GT0-RQ/-GT0和和-RQ/-GT1-RQ/-GT1,二者都称为总,二者都称为总线请求线请求/ /总线允许信号端,可以分别连接两个其他的总线主模块。

      总线允许信号端,可以分别连接两个其他的总线主模块Ø-RQ/-GT0-RQ/-GT0比比-RQ/-GT1-RQ/-GT1的优先级要高的优先级要高Ø总线操作不允许总线操作不允许““嵌套嵌套””Ø每次总线控制权改变后,总线上必须有一个谁都不使用的空闲周期每次总线控制权改变后,总线上必须有一个谁都不使用的空闲周期7171 CPUCPU部分引脚的三态性部分引脚的三态性所谓三态是指总线输出可以有三个状态:所谓三态是指总线输出可以有三个状态:高电平、低电平和高电平、低电平和高阻状态高阻状态当处于高阻状态时,该总线在逻辑上与所有连接当处于高阻状态时,该总线在逻辑上与所有连接负载断开负载断开具有分时复用总线功能的引脚具有分时复用总线功能的引脚::AD0~AD15、、A16/S3~A19/S6 、、 BHE/S7 ;;具有三态性的引脚具有三态性的引脚:: AD0~AD15、、A16S3~A19S6 、、BHE/S7 、、RD、、WR、、M/IO、、DT/R、、DEN、、INTA等;等;2.1 8086/80882.1 8086/8088微处理器微处理器7272 2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织………………2.2.1 8086/8088存储器组织存储器组织8086/80888086/8088存储空间8086/80888086/8088有有2020条地址线,可直条地址线,可直接对接对1 M1 M个存储单元进行访问。

      每个存储单元进行访问每个存储单元存放一个字节型数个存储单元存放一个字节型数据,且每个存储单元都有一个据,且每个存储单元都有一个2020位的地址,位的地址,1 M1 M个存储单元对应的个存储单元对应的地址为地址为00000H~FFFFFH00000H~FFFFFH每个存储单元中存放的信息称为每个存储单元中存放的信息称为该存储单元的内容例如该存储单元的内容例如00001H00001H单元的内容为单元的内容为9FH9FH,则记为:,则记为:(00001H)=9FH(00001H)=9FH78H9FH46HDFH6CH98H65H5EHA6H66H6FH00000H00001H0011FH00120H00121HE8009HE800AHE800BHE800CHE800DHFFFFFH7373 若存放的是字型数据若存放的是字型数据(16(16位二进制数位二进制数) ),则,则将字的将字的低位字节存放在低地址单元,高位低位字节存放在低地址单元,高位字节存放在高地址单元字节存放在高地址单元例如从地址例如从地址0011FH0011FH开始的两个连续单元中存放一个开始的两个连续单元中存放一个字型数据字型数据DF46HDF46H,则记为:,则记为:(0011FH)=DF46H(0011FH)=DF46H。

      若存放的是双字型数据若存放的是双字型数据(32(32位二进制数,这位二进制数,这种数一般作为地址指针,种数一般作为地址指针,其低位字是被寻其低位字是被寻址地址的偏移量,高位字是被寻址地址所址地址的偏移量,高位字是被寻址地址所在段的段地址在段的段地址) ),这种类型的数据要占用连,这种类型的数据要占用连续的续的4 4个存储单元,同样,低字节存放在个存储单元,同样,低字节存放在低地址单元,高字节存放在高地址单元低地址单元,高字节存放在高地址单元例如从地址例如从地址E800AHE800AH开始的连续开始的连续4 4个存储单个存储单元中存放了一个双字型数据元中存放了一个双字型数据66A65E65H66A65E65H,,则记为:则记为:(E800AH)=66A65E65H(E800AH)=66A65E65H2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织7474 存储器的段结构存储器的段结构8086/8088 CPU8086/8088 CPU中有关可用来存放地址的寄存器如中有关可用来存放地址的寄存器如IPIP、、SPSP等都是等都是1616位的,故只能直接寻址位的,故只能直接寻址64 KB64 KB。

      为为了对了对1 M1 M个存储单元进行管理,个存储单元进行管理,8086/80888086/8088采用了段采用了段结构的存储器管理方法结构的存储器管理方法8086/80888086/8088将整个存储器分为许多逻辑段,每个逻将整个存储器分为许多逻辑段,每个逻辑段的容量小于或等于辑段的容量小于或等于64 KB64 KB,允许它们在整个存,允许它们在整个存储空间中浮动,各个逻辑段之间可以紧密相连,也储空间中浮动,各个逻辑段之间可以紧密相连,也可以互相重叠可以互相重叠用户编写的程序用户编写的程序( (包括指令代码和数据包括指令代码和数据) )被分别存储被分别存储在代码段、数据段、堆栈段和附加数据段中,这些在代码段、数据段、堆栈段和附加数据段中,这些段的段地址分别存储在段寄存器段的段地址分别存储在段寄存器CSCS、、DSDS、、SSSS和和ESES中,而指令或数据在段内偏移地址可由对应的地址中,而指令或数据在段内偏移地址可由对应的地址寄存器或立即数给出寄存器或立即数给出2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织7575 存储器操作类型存储器操作类型段段 地地 址址偏移地址偏移地址正常来源正常来源其他来源其他来源取指令取指令CSCS无无IPIP存取操作数存取操作数DSDSCSCS、、ESES、、SSSS有效地址有效地址EAEA通过通过BPBP寻址存取操作数寻址存取操作数SSSSCSCS、、DSDS、、ESES有效地址有效地址EAEA堆栈操作堆栈操作SSSS无无BPBP、、SPSP源字符串源字符串DSDSCSCS、、ESES、、SSSSSISI目的字符串目的字符串ESES无无DIDI存储器操作时段地址和段内偏移地址的来源存储器操作时段地址和段内偏移地址的来源存储器操作时段地址和偏移地址的约定是由系统设计时事先存储器操作时段地址和偏移地址的约定是由系统设计时事先已规定好的,编写程序时必须遵守这些约定已规定好的,编写程序时必须遵守这些约定读指令时,段地址由代码段寄存器读指令时,段地址由代码段寄存器CSCS提供,当前要读取指令提供,当前要读取指令在代码段中的偏移地址由指令指针寄存器在代码段中的偏移地址由指令指针寄存器IPIP提供;提供;在读取或存储操作数时,根据具体操作,段地址由在读取或存储操作数时,根据具体操作,段地址由DSDS、、ESES或或SSSS提供,段内偏移地址通常由寄存器提供,段内偏移地址通常由寄存器BXBX、、SISI、、DIDI以及立以及立即数等提供,这类偏移地址也被称为即数等提供,这类偏移地址也被称为““有效地址有效地址””(EA(EA,,Effective Address)Effective Address)。

      2.2 8086/8088存储器和I/O组织7676 逻辑地址与物理地址逻辑地址与物理地址逻辑地址逻辑地址:通过段地址和偏移地址来表示的存储单元:通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址,记为:段地址:偏移地址的地址称为逻辑地址,记为:段地址:偏移地址物理地址物理地址::CPUCPU与存储器进行数据交换时在地址总线与存储器进行数据交换时在地址总线上提供的上提供的2020位地址信息称为物理地址位地址信息称为物理地址,是由,是由CPUCPU内部内部总线接口单元总线接口单元BIUBIU中的地址加法器根据逻辑地址产生中的地址加法器根据逻辑地址产生的当由当由IPIP提供或由提供或由EUEU根据指令所提供寻址方式计算出寻址单元根据指令所提供寻址方式计算出寻址单元的的1616位段内偏移地址后,把该偏移地址和段寄存器内容左移位段内偏移地址后,把该偏移地址和段寄存器内容左移四位(相当于乘以四位(相当于乘以10H10H)得到的段基址(段内第一个存储单)得到的段基址(段内第一个存储单元的物理地址)同时送到元的物理地址)同时送到BIUBIU中的地址加法器,形成一个中的地址加法器,形成一个2020位的物理地址,从而实现对存储单元的访问。

      位的物理地址,从而实现对存储单元的访问2.2 8086/8088存储器和I/O组织7777 由逻辑地址求物理地址的公式为:由逻辑地址求物理地址的公式为:物理地址物理地址= =段地址段地址×10H+×10H+段内偏移地址段内偏移地址若设当前若设当前(CS)=20A8H(CS)=20A8H,,(IP)=2008H(IP)=2008H,则下一条从内存中读,则下一条从内存中读取的指令所在存储单元的物理地址为:取的指令所在存储单元的物理地址为:20A8H×10H+2008H=22A88H20A8H×10H+2008H=22A88H若某操作数在数据段内的偏移地址为若某操作数在数据段内的偏移地址为8000H8000H,,(DS)=2A0FH(DS)=2A0FH,则该操作数所在存储单元的物理地址为:,则该操作数所在存储单元的物理地址为:2A0FH×10H+8000H=320F0H2A0FH×10H+8000H=320F0H2.2 8086/8088存储器和I/O组织7878 堆栈操作堆栈操作堆栈是在存储器中开辟的一个特定区域堆栈在存堆栈是在存储器中开辟的一个特定区域堆栈在存储器中所处的段称为堆栈段,和其他逻辑段一样,储器中所处的段称为堆栈段,和其他逻辑段一样,它可在它可在1MB1MB的存储空间中浮动,其容量可达的存储空间中浮动,其容量可达6464KBKB。

      开辟堆栈的目的主要有以下两点:开辟堆栈的目的主要有以下两点:(1) (1) 存放指令操作数存放指令操作数( (变量变量) )(2) (2) 保护断点和现场保护断点和现场保护断点保护断点,是指调用子程序或执行中断服务程序时,必须先,是指调用子程序或执行中断服务程序时,必须先把断点处的有关信息把断点处的有关信息( (如如CSCS的内容的内容( (需要时需要时) )、、IPIP的内容以及的内容以及标志寄存器标志寄存器FLAGSFLAGS的内容等的内容等) )压入堆栈,以便执行完子程序压入堆栈,以便执行完子程序或中断服务程序后再将其弹出堆栈,以恢复有关寄存器的内或中断服务程序后再将其弹出堆栈,以恢复有关寄存器的内容,而使原来的程序能从断点处继续往下执行容,而使原来的程序能从断点处继续往下执行保护现场保护现场是指将在子程序或中断服务程序中用到的寄存器的是指将在子程序或中断服务程序中用到的寄存器的内容压入堆栈,在返回主程序之前再将其弹出堆栈,以恢复内容压入堆栈,在返回主程序之前再将其弹出堆栈,以恢复寄存器原有的内容,从而使其返回后主程序能继续正确执寄存器原有的内容,从而使其返回后主程序能继续正确执行。

      行2.2 8086/8088存储器和I/O组织7979 …………………………xxxxxxxxxxxxxxxxxxxx进栈和出栈操作进栈和出栈操作在执行进栈和出栈操作时,段地址由堆栈段寄存器在执行进栈和出栈操作时,段地址由堆栈段寄存器SSSS提供,提供,段内偏移地址由堆栈指针寄存器段内偏移地址由堆栈指针寄存器SPSP提供,提供,SPSP始终指向栈始终指向栈顶,当堆栈空时,顶,当堆栈空时,SPSP指向栈底指向栈底每进行一次进栈操作每进行一次进栈操作(PUSH(PUSH操作操作) ),,SPSP值减值减2 2,每进行一次出,每进行一次出栈操作栈操作(POP(POP操作操作) ),,SPSP值加值加2 2在进栈和出栈操作过程中,在进栈和出栈操作过程中,SPSP始终指向栈顶始终指向栈顶SS): (SP)2000: 00002000: 00012000: 00F82000: 00F92000: 00FA2000: 00FB2000: 00FC2000: 00FD2000: 00FE2000: 00FF2000: 0100堆栈段(SP)=0100H栈底xxxxxxxx1FH2BH8FHA2HC7H4AH(i) 堆栈空(ii) 执行 PUSH AXPUSH BXPUSH CX 指令后栈顶(SP)=00FAH栈底(CX)2B1FH(BX)A28FH(AX)4AC7Hxxxxxxxx1FH2BH8FHA2HC7H4AH(iii) 执行 POP CXPOP BX 指令后栈顶(SP)=00FEH栈底(CX)(BX)8080 2.2.2 8086/8088的的I/O组织组织I/OI/O接口的作用接口的作用主机与外界交换信息称为输入主机与外界交换信息称为输入/ /输出输出(I/O)(I/O)。

      主机与外主机与外界的信息交换是通过输入界的信息交换是通过输入/ /输出设备进行的一般的输出设备进行的一般的输入输入/ /输出设备都是机械的或机电相结合的产物,比输出设备都是机械的或机电相结合的产物,比如常规的外设有键盘、显示器、打印机、扫描仪、如常规的外设有键盘、显示器、打印机、扫描仪、磁盘机、鼠标器等,它们相对于高速的中央处理器磁盘机、鼠标器等,它们相对于高速的中央处理器来说,速度要慢得多此外,不同外设的信号形来说,速度要慢得多此外,不同外设的信号形式、数据格式也各不相同因此,外部设备不能与式、数据格式也各不相同因此,外部设备不能与CPUCPU直接相连,需要通过相应的电路来完成它们之直接相连,需要通过相应的电路来完成它们之间的速度匹配、信号转换,并完成某些控制功能间的速度匹配、信号转换,并完成某些控制功能通常把通常把介于主机和外设之间的一种缓冲电路称为介于主机和外设之间的一种缓冲电路称为I/OI/O接口电路,简称接口电路,简称I/OI/O接口接口(Interface) (Interface) 2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8181 CPUCPUI/OI/O接口接口外设外设对于主机,对于主机,I/OI/O接口提供了外部设备的工作状态及数接口提供了外部设备的工作状态及数据;对于外部设备,据;对于外部设备,I/OI/O接口记忆了主机送给外设的一接口记忆了主机送给外设的一切命令和数据,从而使主机与外设之间协调一致地工切命令和数据,从而使主机与外设之间协调一致地工作。

      作对于微型计算机来说,设计微处理器CPU时,并不设计它与外设之间的接口部分,而是将输入/输出设备的接口电路设计成相对独立的部件,通过它们将各种类型的外设与CPU连接起来,从而构成完整的微型计算机硬件系统输入输入/ /输出系统包括输出系统包括I/OI/O接口、接口、I/OI/O设备及相关设备及相关的控制软件,是计算机系统的重要组成部分的控制软件,是计算机系统的重要组成部分之一,任何一台高性能计算机,如果没有高之一,任何一台高性能计算机,如果没有高质量的输入质量的输入/ /输出系统与之配合工作,计算机输出系统与之配合工作,计算机的高性能便无法发挥出来的高性能便无法发挥出来8282 CPUCPU与外设间的交换信息与外设间的交换信息1.数据信息.数据信息包括数字量、模拟量和开关量三种形式包括数字量、模拟量和开关量三种形式2. 2. 状态信息状态信息状态信息作为状态信息作为CPU与外设之间交换数据时的联络信息,反与外设之间交换数据时的联络信息,反映了当前外设所处的工作状态,是外设通过接口送往映了当前外设所处的工作状态,是外设通过接口送往CPU的CPU通过对外设状态信号的读取,可得知输入设备的通过对外设状态信号的读取,可得知输入设备的数据是否准备好、输出设备是否空闲等情况。

      数据是否准备好、输出设备是否空闲等情况对于输入设备,一般用准备好对于输入设备,一般用准备好(READY)信号的高低来表明信号的高低来表明待输入的数据是否准备就绪;对于输出设备,则用忙待输入的数据是否准备就绪;对于输出设备,则用忙(BUSY)信号的高低表示输出设备是否处于空闲状态,如为信号的高低表示输出设备是否处于空闲状态,如为空闲状态,则可接收空闲状态,则可接收CPU输出的信息,否则输出的信息,否则CPU要暂停送要暂停送数因此,状态信息能够保障数因此,状态信息能够保障CPU与外设正确地进行数据与外设正确地进行数据交换2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8383 3 3.控制信息.控制信息控制信息是控制信息是CPUCPU通过接口传送给外设的,通过接口传送给外设的,CPUCPU通过发送控通过发送控制信息设置外设制信息设置外设( (包括接口包括接口) )的工作模式、控制外设的工的工作模式、控制外设的工作如外设的启动信号和停止信号就是常见的控制信息如外设的启动信号和停止信号就是常见的控制信息实际上,控制信息往往随着外设的具体工作原理不同而含实际上,控制信息往往随着外设的具体工作原理不同而含义不同。

      义不同虽然数据信息、状态信息和控制信息含义各不相同,但在微型计算虽然数据信息、状态信息和控制信息含义各不相同,但在微型计算机系统中,机系统中,CPUCPU通过接口和外设交换信息时,只能用输入指令通过接口和外设交换信息时,只能用输入指令(IN)(IN)和和输出指令输出指令 (OUT)(OUT)传送数据传送数据,所以状态信息、控制信息也是被作为数,所以状态信息、控制信息也是被作为数据信息来传送的,即把状态信息作为一种输入数据,而把控制信息据信息来传送的,即把状态信息作为一种输入数据,而把控制信息作为一种输出数据,这样,状态信息和控制信息也通过数据总线来作为一种输出数据,这样,状态信息和控制信息也通过数据总线来传送但在接口中,这三种信息是在不同的寄存器中分别存放的传送但在接口中,这三种信息是在不同的寄存器中分别存放的2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8484 I/O接口的基本结构CBABDBCPU数据端口状态端口I/O设备译码控制端口每个接口电路中都包含一组寄存器,每个接口电路中都包含一组寄存器,CPUCPU与外设进行信息交换与外设进行信息交换时,各类信息在接口中存入不同的寄存器,一般称这些寄存器时,各类信息在接口中存入不同的寄存器,一般称这些寄存器为为I/OI/O端口,简称为口端口,简称为口(Port)(Port)。

      用来保存用来保存CPUCPU和外设之间传送的和外设之间传送的数据数据( (如数字、字符及某种特定的编码等如数字、字符及某种特定的编码等) )、对输入、对输入/ /输出数据起输出数据起缓冲作用的数据寄存器称为数据端口;用来存放外设或者接口缓冲作用的数据寄存器称为数据端口;用来存放外设或者接口部件本身状态的状态寄存器称为状态端口;用来存放部件本身状态的状态寄存器称为状态端口;用来存放CPUCPU发往发往外设的控制命令的控制寄存器称为控制端口外设的控制命令的控制寄存器称为控制端口8585 正如每个存储单元都有一个物理地址一样,每个端正如每个存储单元都有一个物理地址一样,每个端口也有一个地址与之相对应,该地址称为端口地口也有一个地址与之相对应,该地址称为端口地址有了端口地址端口地址,,CPUCPU对外设的输入对外设的输入/ /输出操作实输出操作实际上就是对际上就是对I/OI/O接口中各端口的读接口中各端口的读/ /写操作数据端写操作数据端口一般是双向的,数据是输入还是输出,取决于对口一般是双向的,数据是输入还是输出,取决于对该端口地址进行操作时该端口地址进行操作时CPUCPU发往接口电路的读发往接口电路的读/ /写控写控制信号。

      由于状态端口只做输入操作,控制端口只制信号由于状态端口只做输入操作,控制端口只做输出操作,因此,有时为了节省系统地址空间,做输出操作,因此,有时为了节省系统地址空间,在设计接口时往往将这两个端口共用一个端口地在设计接口时往往将这两个端口共用一个端口地址,再用读址,再用读/ /写信号来分别选择访问写信号来分别选择访问输入输入/输出操作所用到的地址总是对端口而言,而不是对接口输出操作所用到的地址总是对端口而言,而不是对接口而言的接口和端口是两个不同的概念,而言的接口和端口是两个不同的概念,若干个端口加上相应若干个端口加上相应的控制电路才构成接口的控制电路才构成接口2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8686 I/OI/O端口的编址端口的编址微型计算机系统中微型计算机系统中I/OI/O端口编址方式有两种:端口编址方式有两种:I/OI/O端口端口与内存单元统一编址和与内存单元统一编址和 I/OI/O端口与内存单元独立编址端口与内存单元独立编址I/OI/O端口与内存单元统一编址是对I/OI/O端口和存储单元按照存储单元的编址方法统一编排地址号,由I/OI/O端口地址和存储单元地址共同构成一个统一的地址空间。

      I/OI/O端口与内存单元独立编址就是内存地址空间和I/OI/O地址空间是相对独立的,通过控制总线来确定CPUCPU到底要访问内存还是I/OI/O端口为确保控制总线发出正确的信号,除了要有访问内存的指令之外,系统还要提供用于CPUCPU与I/OI/O端口之间进行数据传输的输入/ /输出指令在在8086/80888086/8088系统中采用的是系统中采用的是独立编址方式独立编址方式,共有,共有2020根地址线对内存根地址线对内存寻址,寻址,内存的地址范围是内存的地址范围是00000H~FFFFFH00000H~FFFFFH;而只用地址总线的低;而只用地址总线的低1616位对位对I/OI/O端口寻址,端口寻址,所以所以I/OI/O端口的地址范围是端口的地址范围是0000H~FFFFH0000H~FFFFHCPUCPU在访问内存和外设时,使用了不同的控制信号来加以区分在访问内存和外设时,使用了不同的控制信号来加以区分例如,当例如,当M/IO=1M/IO=1时候,表示地址总线上是一个内存地址;当时候,表示地址总线上是一个内存地址;当M/IO=0M/IO=0时候,是时候,是表示地址总线上是一个端口地址。

      表示地址总线上是一个端口地址2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8787 I/OI/O端口的地址译码端口的地址译码微机系统常用的微机系统常用的I/OI/O接口电路一般都被设计成通用的接口电路一般都被设计成通用的I/OI/O接口芯片,一个接口芯片内部可以有若干可寻址接口芯片,一个接口芯片内部可以有若干可寻址的端口因此,所有接口芯片都有片选信号线和用的端口因此,所有接口芯片都有片选信号线和用于片内端口寻址的地址线于片内端口寻址的地址线例如,某接口芯片内有四个端口地址,则该芯片外就会有两根地址线I/OI/O端口地址译码的方法有多种,一般的原则是把端口地址译码的方法有多种,一般的原则是把CPUCPU用于用于I/OI/O端口寻址的地址线分为高位地址线和低端口寻址的地址线分为高位地址线和低位地址线两部分,将低位地址线直接连到位地址线两部分,将低位地址线直接连到I/OI/O接口芯接口芯片的相应地址引脚,实现片内寻址,即选中片内的片的相应地址引脚,实现片内寻址,即选中片内的端口;将高位地址线与端口;将高位地址线与CPUCPU的控制信号组合,经地的控制信号组合,经地址译码电路产生址译码电路产生I/OI/O接口芯片的片选信号。

      接口芯片的片选信号2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8888 8086/80888086/8088的的I/OI/O组织组织8086/80888086/8088系统和外部设备之间是通过系统和外部设备之间是通过I/OI/O接口电路接口电路来联系的每个来联系的每个I/OI/O接口都有一个或几个端口在微接口都有一个或几个端口在微机系统中机系统中每个端口分配一个地址号,称为端口地每个端口分配一个地址号,称为端口地址一个端口通常为一个端口通常为I/OI/O接口电路内部的一个寄存器接口电路内部的一个寄存器或一组寄存器或一组寄存器8086/8088 CPU8086/8088 CPU用地址总线的低用地址总线的低1616位作为对位作为对8 8位位I/OI/O端口的寻址线,所以端口的寻址线,所以8086/80888086/8088系统可访问的系统可访问的8 8位位I/OI/O端口有端口有65536(64K)65536(64K)个两个编号相邻的两个编号相邻的8 8位端口可以组成一个位端口可以组成一个1616位的端位的端口2.2 8086/80882.2 8086/8088存储器和存储器和I/OI/O组织组织8989 2.3.1 CPU与外设之间数据传送的四种方式1 1)无条件传送方式)无条件传送方式CPU对外设进行输入/输出操作时无需考虑外设的状态;微机系统中的一些简单的外设,如开关、继电器、数码微机系统中的一些简单的外设,如开关、继电器、数码管、发光二极管等,在它们工作时,可以认为输入设备已管、发光二极管等,在它们工作时,可以认为输入设备已随时准备好向随时准备好向CPUCPU提供数据,而输出设备也随时准备好接提供数据,而输出设备也随时准备好接收收CPUCPU送来的数据,这样,在送来的数据,这样,在CPUCPU需要同外设交换信息需要同外设交换信息时,就能够用时,就能够用ININ或或OUTOUT指令直接对这些外设进行输入指令直接对这些外设进行输入/ /输出输出操作。

      操作2.3 8086/80882.3 8086/8088中断系统中断系统9090 2 2)查询传送方式)查询传送方式也称为条件传送,是指在执行输入指令也称为条件传送,是指在执行输入指令(IN)(IN)或输出指或输出指令令(OUT)(OUT)前,要先查询相应设备的状态,当输入设备前,要先查询相应设备的状态,当输入设备处于准备好状态,输出设备处于空闲状态时,处于准备好状态,输出设备处于空闲状态时,CPUCPU才才执行输入执行输入/ /输出指令与外设交换信息为此,接口电路输出指令与外设交换信息为此,接口电路中既要有中既要有数据端口,还要有状态端口数据端口,还要有状态端口查询传送方式的主要优点是能保证主机与外设之间协调同步地工查询传送方式的主要优点是能保证主机与外设之间协调同步地工作,且硬件线路比较简单,程序也容易实现但是,在这种方式作,且硬件线路比较简单,程序也容易实现但是,在这种方式下,下,CPU花费了很多时间查询外设是否准备就绪,在这些时间里花费了很多时间查询外设是否准备就绪,在这些时间里CPU不能进行其他的操作不能进行其他的操作不论是无条件传送方式还是查询传送方式,不论是无条件传送方式还是查询传送方式,都不能发现和处理预先都不能发现和处理预先无法估计的错误和异常情况。

      为了提高无法估计的错误和异常情况为了提高CPU的效率、增强系统的实的效率、增强系统的实时性,并能对随机出现的各种异常情况做出及时反应,通常采用时性,并能对随机出现的各种异常情况做出及时反应,通常采用中中断传送方式断传送方式2.3 8086/80882.3 8086/8088中断系统中断系统9191 3 3)中断传送方式)中断传送方式中断传送方式是指当外设需要与中断传送方式是指当外设需要与CPUCPU进行信息交换进行信息交换时,由外设向时,由外设向CPUCPU发出请求信号,使发出请求信号,使CPUCPU暂停正在暂停正在执行的程序,转去执行数据的输入执行的程序,转去执行数据的输入/ /输出操作,数据输出操作,数据传送结束后,传送结束后,CPUCPU再继续执行被暂停的程序再继续执行被暂停的程序中断传送方式的优点是中断传送方式的优点是::CPUCPU不必查询等待,工作效率高,不必查询等待,工作效率高,CPUCPU与外设可以并行工作;由于外设具有申请中断的主动权,故与外设可以并行工作;由于外设具有申请中断的主动权,故系统实时性比查询方式要好得多系统实时性比查询方式要好得多缺点:缺点:采用中断传送的接口电采用中断传送的接口电路相对复杂,而且每进行一次数据传送就要中断一次路相对复杂,而且每进行一次数据传送就要中断一次CPUCPU,,CPUCPU每次响应中断后,都要转去执行中断处理程序,且都要进行断点每次响应中断后,都要转去执行中断处理程序,且都要进行断点和现场的保护和恢复,浪费了很多和现场的保护和恢复,浪费了很多CPUCPU的时间。

      故这种传送方式的时间故这种传送方式一般适合于少量的数据传送对于大批量数据的输入一般适合于少量的数据传送对于大批量数据的输入/ /输出,可采输出,可采用高速的直接存储器存取方式,即用高速的直接存储器存取方式,即DMADMA方式2.3 8086/80882.3 8086/8088中断系统中断系统9292 4 4)直接存储器存取)直接存储器存取(DMA)(DMA)传送方式传送方式DMADMA传送方式是在存储器和外设之间、存储器和存传送方式是在存储器和外设之间、存储器和存储器之间直接进行数据传送储器之间直接进行数据传送( (如磁盘与内存间交换数如磁盘与内存间交换数据、高速数据采集、内存和内存间的高速数据块传据、高速数据采集、内存和内存间的高速数据块传送等送等) ),,传送过程无需传送过程无需CPUCPU介入介入,这样,在传送时就,这样,在传送时就不必进行保护现场等一系列额外操作,传输速度基不必进行保护现场等一系列额外操作,传输速度基本取决于存储器和外设的速度本取决于存储器和外设的速度DMADMA传送方式需要传送方式需要一个一个专用接口芯片专用接口芯片DMADMA控制器控制器(DMAC)(DMAC)对传送过程对传送过程加以控制和管理。

      在进行加以控制和管理在进行DMADMA传送期间,传送期间,CPUCPU放弃放弃总线控制权,将系统总线交由总线控制权,将系统总线交由DMACDMAC控制,由控制,由DMACDMAC发出地址及读发出地址及读/ /写信号来实现高速数据传输写信号来实现高速数据传输传送结束后传送结束后DMACDMAC再将总线控制权交还给再将总线控制权交还给CPUCPU一般微处理器都设有用于般微处理器都设有用于DMADMA传送的联络线传送的联络线2.3 8086/80882.3 8086/8088中断系统中断系统9393 2.3.2 中断技术中断技术中断中断在在CPUCPU执行程序的过程中,出现了某种紧急或异常的执行程序的过程中,出现了某种紧急或异常的事件事件( (中断请求中断请求) ),,CPUCPU需暂停正在执行的程序,转去需暂停正在执行的程序,转去处理该事件处理该事件( (执行中断服务程序执行中断服务程序) ),并在处理完毕后返,并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中回断点处继续执行被暂停的程序,这一过程称为中断断点断点处是指返回主程序时执行的第一条指令的地处是指返回主程序时执行的第一条指令的地址。

      为实现中断功能而设置的硬件电路和与之相应的址为实现中断功能而设置的硬件电路和与之相应的软件,称为中断系统软件,称为中断系统2.3 8086/80882.3 8086/8088中断系统中断系统9494 中断源中断源任何能够引发中断的事件都称为中断源,可分为硬任何能够引发中断的事件都称为中断源,可分为硬件中断源和软件中断源两类件中断源和软件中断源两类硬件中断源主要包括外设硬件中断源主要包括外设( (如键盘、打印机等如键盘、打印机等) )、数据通道、数据通道( (如磁盘机、磁带机等如磁盘机、磁带机等) )、时钟电路、时钟电路( (如定时计数器如定时计数器8253)8253)和和故障源故障源( (如电源掉电如电源掉电) )等;等;软件中断源主要包括为调试程序设置的中断软件中断源主要包括为调试程序设置的中断( (如断点、单如断点、单步执行等步执行等) )、中断指令、中断指令( (如如INT 21HINT 21H等等) )以及指令执行过程出以及指令执行过程出错错( (如除法运算时除数为零如除法运算时除数为零) )等2.3 8086/80882.3 8086/8088中断系统中断系统9595 中断处理过程中断处理过程对于一个中断源的中断处理过程应包括以下几个步骤,即对于一个中断源的中断处理过程应包括以下几个步骤,即中断请中断请求、中断响应、保护断点、中断处理和中断返回。

      求、中断响应、保护断点、中断处理和中断返回1. 1. 中断请求中断请求中断请求是中断源向中断请求是中断源向CPU发出的请求中断的要求软件中发出的请求中断的要求软件中断源是在断源是在CPU内部由中断指令或程序出错直接引发中断;内部由中断指令或程序出错直接引发中断;而硬件中断源必须通过专门的电路将中断请求信号传送给而硬件中断源必须通过专门的电路将中断请求信号传送给CPU,,CPU也有专门的引脚接收中断请求信号例如,也有专门的引脚接收中断请求信号例如,8086/8088 CPU用用INTR引脚引脚(可屏蔽中断请求可屏蔽中断请求)和和NMI引脚引脚(非屏蔽中断请求非屏蔽中断请求)接收硬件中断请求信号一般外设发出接收硬件中断请求信号一般外设发出的都是可屏蔽中断请求的都是可屏蔽中断请求2.3 8086/80882.3 8086/8088中断系统中断系统9696 3. 3. 保护断点保护断点CPUCPU一旦响应中断,需要一旦响应中断,需要对其正在执行程序的断点对其正在执行程序的断点信息进行保护,以便在中信息进行保护,以便在中断处理结束后仍能回到该断处理结束后仍能回到该断点处继续执行对于断点处继续执行。

      对于8086/8088 CPU8086/8088 CPU,保护断,保护断点的过程由硬件自动完点的过程由硬件自动完成,主要工作是成,主要工作是关中断关中断、、将标志寄存器内容入栈保将标志寄存器内容入栈保存以及将存以及将CSCS和和IPIP内容入栈内容入栈保存2.2. 中断响应中断响应CPUCPU在每条指令执行的最后一个时钟周期检测其中断请求输入在每条指令执行的最后一个时钟周期检测其中断请求输入端,判断有无中断请求,若端,判断有无中断请求,若CPUCPU接收到了中断请求信号,且此接收到了中断请求信号,且此时时CPUCPU内部的中断允许触发器的状态为内部的中断允许触发器的状态为1 1,则,则CPUCPU在现行指令执在现行指令执行完后,行完后,发出发出INTAINTA信号响应中断信号响应中断一旦进入中断处理,应立即一旦进入中断处理,应立即清除中断请求信号,这样可以避免一个中断请求被清除中断请求信号,这样可以避免一个中断请求被CPUCPU多次响多次响应R≥1允许中断开中断指令关中断指令CPUCPU响应中断信号INTRRESETSQ2.3 8086/80882.3 8086/8088中断系统中断系统9797 4. 4. 中断处理中断处理中断处理的过程实际就是中断处理的过程实际就是CPUCPU执行中断服务程序的过程。

      用执行中断服务程序的过程用户编写的用于户编写的用于CPUCPU为中断源进行中断处理的程序称为中断服为中断源进行中断处理的程序称为中断服务程序由于不同中断源在系统中的作用不同,所要完成的务程序由于不同中断源在系统中的作用不同,所要完成的功能不同,因此,不同中断源的中断服务程序内容也各不相功能不同,因此,不同中断源的中断服务程序内容也各不相同例如,同例如,对于一般的输入设备,其中断服务程序的主要任对于一般的输入设备,其中断服务程序的主要任务是用输入指令务是用输入指令(IN)(IN)从接口中的数据端口向从接口中的数据端口向CPUCPU输入数据输入数据主程序中有些寄存器的内容在中断前后需保持一致,不能因中主程序中有些寄存器的内容在中断前后需保持一致,不能因中断而发生变化,但在中断服务程序中又用到了这些寄存器,为断而发生变化,但在中断服务程序中又用到了这些寄存器,为了保证在返回主程序后仍能从断点处继续正确执行,还需要在了保证在返回主程序后仍能从断点处继续正确执行,还需要在中断服务程序的开头对这些中断服务程序的开头对这些寄存器内容进行保护寄存器内容进行保护( (即保护现即保护现场场) ),在中断服务程序的末尾恢复这些寄存器的内容,在中断服务程序的末尾恢复这些寄存器的内容( (即恢复现即恢复现场场) )。

      保护现场和恢复现场一般用保护现场和恢复现场一般用PUSHPUSH和和POPPOP指令实现,所以指令实现,所以要特别注意寄存器内容入栈和出栈的次序要特别注意寄存器内容入栈和出栈的次序5. 5. 中断返回中断返回执行完中断服务程序,返回到原先被中断的程序,此过程称执行完中断服务程序,返回到原先被中断的程序,此过程称为中断返回为了能正确返回到原来程序的断点处,在中断为中断返回为了能正确返回到原来程序的断点处,在中断服务程序的最后应专门放置一条中断返回指令服务程序的最后应专门放置一条中断返回指令( (如如8086/80888086/8088的的IRETIRET指令指令) )中断返回指令的作用实际上是恢复断点,也中断返回指令的作用实际上是恢复断点,也就是保护断点的逆过程就是保护断点的逆过程2.3 8086/80882.3 8086/8088中断系统中断系统9898 中断优先级和中断的嵌套中断优先级和中断的嵌套中断优先级中断请求是随机发生的,当系统具有多个中断源时,有时中断请求是随机发生的,当系统具有多个中断源时,有时会同时出现多个中断请求,会同时出现多个中断请求,CPUCPU只能按一定的次序予以响只能按一定的次序予以响应和处理,这个响应的次序称为中断优先级。

      对于不同级应和处理,这个响应的次序称为中断优先级对于不同级别的中断请求,一般的处理原则是:别的中断请求,一般的处理原则是:(1) (1) 不同优先级的多个中断源同时发出中断请求,按优先级不同优先级的多个中断源同时发出中断请求,按优先级由高到低依次处理由高到低依次处理2) (2) 低优先级中断正在处理,出现高优先级请求,应转去处低优先级中断正在处理,出现高优先级请求,应转去处理高优先级请求,服务结束后再返回原优先级较低的中断服理高优先级请求,服务结束后再返回原优先级较低的中断服务程序继续执行务程序继续执行3) (3) 高优先级中断正在处理,出现低优先级请求,可暂不响高优先级中断正在处理,出现低优先级请求,可暂不响应4) (4) 中断处理时,出现同级别请求,应在当前中断处理结束中断处理时,出现同级别请求,应在当前中断处理结束以后再处理新的请求以后再处理新的请求2.3 8086/80882.3 8086/8088中断系统中断系统9999 中断优先级的确定中断优先级的确定在微机系统中通常用三种方法来确定中断源的优先级别,即在微机系统中通常用三种方法来确定中断源的优先级别,即软件查软件查询法、硬件排队电路法和专用中断控制芯片法。

      询法、硬件排队电路法和专用中断控制芯片法1) 1) 软件查询法软件查询法软件查询法需要简单的硬件电路支持,将各个外设的中断请软件查询法需要简单的硬件电路支持,将各个外设的中断请求信号相或,产生一个总的求信号相或,产生一个总的INTINT信号任一个外设有中断请求,该电路都可向任一个外设有中断请求,该电路都可向CPU发中断请求信号发中断请求信号(INT),,CPU响应后进入中断处理程序,在中断处理程序的开响应后进入中断处理程序,在中断处理程序的开始对相关外设的中断状态顺序逐个查询,查到某外设有中断始对相关外设的中断状态顺序逐个查询,查到某外设有中断请求,于是转到与其相应的中断服务程序,同时该外设撤消请求,于是转到与其相应的中断服务程序,同时该外设撤消其中断请求信号其中断请求信号采用软件查询方式,各中断源的优先级是由查询顺序决定采用软件查询方式,各中断源的优先级是由查询顺序决定的,最先查询的设备,其优先级最高,最后查询的设备,其的,最先查询的设备,其优先级最高,最后查询的设备,其优先级最低采用软件查询方式的优点是节省硬件但是,优先级最低采用软件查询方式的优点是节省硬件但是,由于由于CPU每次响应中断时都要对各中断源进行逐一查询,所每次响应中断时都要对各中断源进行逐一查询,所以其响应速度较慢。

      对于优先级较低的中断源来说,该缺点以其响应速度较慢对于优先级较低的中断源来说,该缺点更为明显更为明显2.3 8086/80882.3 8086/8088中断系统中断系统100100 2) 2) 硬件排队电路法硬件排队电路法采用硬件排队电路法,各个外设的优先级与其接口在排队采用硬件排队电路法,各个外设的优先级与其接口在排队电路中的位置有关常用的硬件优先权排队电路有链式优电路中的位置有关常用的硬件优先权排队电路有链式优先权排队电路、硬件优先级编码加比较器的排队电路等先权排队电路、硬件优先级编码加比较器的排队电路等3)3)专用中断控制芯片法专用中断控制芯片法上述两种方法虽然可以解决中断优先级控制问题,但实现上述两种方法虽然可以解决中断优先级控制问题,但实现起来在硬件和软件上都要做大量的工作,十分麻烦一种起来在硬件和软件上都要做大量的工作,十分麻烦一种方便的办法就是利用专门提供的方便的办法就是利用专门提供的可编程中断控制器,可编程中断控制器,这样这样的器件在各种微机中得到普遍应用后面将介绍的的器件在各种微机中得到普遍应用后面将介绍的8259A8259A就是广泛应用于就是广泛应用于80x8680x86微机系统中的专用可编程中断控制微机系统中的专用可编程中断控制芯片。

      芯片2.3 8086/80882.3 8086/8088中断系统中断系统101101 主程序主程序STI低级中断请求低级中断请求低级中断服务程序低级中断服务程序 STI高级中断请求高级中断请求中断嵌套中断嵌套CPUCPU在执行低级别中断服务程序时,又收到较高级别在执行低级别中断服务程序时,又收到较高级别的中断请求,的中断请求,CPUCPU暂停执行低级别中断服务程序,转暂停执行低级别中断服务程序,转去处理这个高级别的中断,处理完后再返回低级别中去处理这个高级别的中断,处理完后再返回低级别中断服务程序,这个过程称为中断嵌套断服务程序,这个过程称为中断嵌套一般一般CPUCPU响应中断请求响应中断请求后,在进入中断服务程序后,在进入中断服务程序前,硬件会自动实现关中前,硬件会自动实现关中断,这样,断,这样,CPUCPU在执行中在执行中 断服务程序时将不能再响断服务程序时将不能再响应其他中断请求为了实应其他中断请求为了实现中断嵌套,应在现中断嵌套,应在低级别低级别中断服务程序的开始处加中断服务程序的开始处加一条开中断指令一条开中断指令STISTI。

      能能够实现中断嵌套的中断系够实现中断嵌套的中断系统,其软、硬件设计都非统,其软、硬件设计都非常复杂,如果采用可编程常复杂,如果采用可编程中断控制器,就会方便很中断控制器,就会方便很多多2.3 8086/80882.3 8086/8088中断系统中断系统高级中断高级中断服务程序服务程序102102 2.3.3 8086/8088的中断源类型8086/8088 CPU8086/8088 CPU可以处理可以处理256256种不同类型的中种不同类型的中断,每一种中断都给定一个编号断,每一种中断都给定一个编号(0~255)(0~255),称,称为中断类型号,为中断类型号,CPUCPU根据中断类型号来识别不根据中断类型号来识别不同的中断源同的中断源8086/80888086/8088的中断源可分为两大的中断源可分为两大类:类:一类来自一类来自CPUCPU的外部,由外设的请求引起,称为的外部,由外设的请求引起,称为硬硬件中断件中断( (又称外部中断又称外部中断) );;另一类来自另一类来自CPUCPU的内部,由执行指令时引起,称为的内部,由执行指令时引起,称为软件中断软件中断( (又称内部中断又称内部中断) )。

      2.3 8086/80882.3 8086/8088中断系统中断系统103103 非屏蔽中断请求非屏蔽中断请求INT 2NMI(17号引脚号引脚)中断逻辑中断逻辑硬件硬件( (外部外部) )中断中断软件软件( (内部内部) )中断中断可屏蔽中断请求可屏蔽中断请求中断类型号中断类型号32~255INTR(18号引脚号引脚)中断指令中断指令INT nN=32~255溢出中断溢出中断INTOINT 4断点断点中断中断INT 3单步中断单步中断(TF=1)INT 1除法除法错误错误INT 0104104 软件中断软件中断( (内部中断内部中断) )8086/8088的软件中断主要有五种,分为三类1) 1) 处理运算过程中某些错误的中断处理运算过程中某些错误的中断执行程序时,为及时处理运算中的某些错误,执行程序时,为及时处理运算中的某些错误,CPUCPU以以中断方式中止正在运行的程序,提醒程序员改错中断方式中止正在运行的程序,提醒程序员改错1) (1) 除法错中断除法错中断( (中断类型号为中断类型号为0)0)在在8086/8088 CPU8086/8088 CPU执行除法指令执行除法指令(DIV/IDIV)(DIV/IDIV)时,若发现时,若发现除数为除数为0 0,或所得的商超过了,或所得的商超过了CPUCPU中有关寄存器所能表示的最大值,中有关寄存器所能表示的最大值,则立即产生一个类型号为则立即产生一个类型号为0 0的内部中断,的内部中断,CPUCPU转去执行除法错转去执行除法错中断处理程序。

      中断处理程序2) (2) 溢出中断溢出中断INTO(INTO(中断类型号为中断类型号为4)4)CPUCPU进行带符号数的算术运算时,若发生了溢出,则标志位进行带符号数的算术运算时,若发生了溢出,则标志位OF=1OF=1,若此时执行,若此时执行INTOINTO指令,会产生溢出中断,打印出一个指令,会产生溢出中断,打印出一个错误信息,结束时不返回,而把控制权交给操作系统若错误信息,结束时不返回,而把控制权交给操作系统若OF=0OF=0,则,则INTOINTO不产生中断,不产生中断,CPUCPU继续执行下一条指令继续执行下一条指令INTOINTO指令通常安排在算术指令之后,以便在溢出时能及时处理例指令通常安排在算术指令之后,以便在溢出时能及时处理例如:如:ADD AX,BXINTO;测试加法的溢出2.3 8086/80882.3 8086/8088中断系统中断系统105105 2) 2) 为调试程序设置的中断为调试程序设置的中断(1) (1) 单步中断单步中断( (中断类型号为中断类型号为1)1)当当TF=1TF=1时,每执行一条指令,时,每执行一条指令,CPUCPU会自动产生一个单步中会自动产生一个单步中断。

      单步中断可一条一条指令地跟踪程序流程,观察各个寄断单步中断可一条一条指令地跟踪程序流程,观察各个寄存器及存储单元内容的变化,帮助分析错误原因单步中断存器及存储单元内容的变化,帮助分析错误原因单步中断又称为陷阱中断,主要用于程序调试又称为陷阱中断,主要用于程序调试2) (2) 断点中断断点中断( (中断类型号为中断类型号为3)3)调试程序时可以在一些关键性的地方设置断点,它相当于把调试程序时可以在一些关键性的地方设置断点,它相当于把一条一条INT 3 INT 3 指令插入到程序中,指令插入到程序中,CPUCPU每执行到断点处,每执行到断点处,INTINT3 3 指令便产生一个中断,使指令便产生一个中断,使CPUCPU转向相应的中断服务程序转向相应的中断服务程序3) 3) 中断指令中断指令INT nINT n引起的中断引起的中断( (中断类型号为中断类型号为n)n)程序设计时,可以用程序设计时,可以用INT nINT n指令来产生软件中断,中断指指令来产生软件中断,中断指令的操作数令的操作数n n给出了中断类型号,给出了中断类型号,CPUCPU执行执行INT nINT n指令后,指令后,会立即产生一个类型号为会立即产生一个类型号为n n的中断,转入相应的中断处理的中断,转入相应的中断处理程序来完成中断功能。

      程序来完成中断功能2.3 8086/80882.3 8086/8088中断系统中断系统106106 硬件中断硬件中断( (外部中断外部中断) )8086/8088 CPU有两条外部中断请求线有两条外部中断请求线NMI(非屏蔽中断非屏蔽中断)和和INTR(可屏蔽中断可屏蔽中断)1) 1) 非屏蔽中断非屏蔽中断NMI(NMI(中断类型号为中断类型号为2)2)整个系统只有一个非屏蔽中断,它不受整个系统只有一个非屏蔽中断,它不受IFIF标志位的屏蔽标志位的屏蔽出现在出现在NMINMI上的请求信号是上升沿触发的,一旦出现,上的请求信号是上升沿触发的,一旦出现,CPUCPU将予以响应非屏蔽中断一般用于紧急故障处理将予以响应非屏蔽中断一般用于紧急故障处理2) 2) 可屏蔽中断可屏蔽中断INTRINTR可屏蔽中断请求信号从可屏蔽中断请求信号从INTRINTR引脚送往引脚送往CPUCPU,高电平有,高电平有效,受效,受IFIF标志位屏蔽,标志位屏蔽,IFIF==0 0时,对于所有从时,对于所有从INTRINTR引脚进引脚进入的中断请求,入的中断请求,CPUCPU均不予响应;另外,也可以在均不予响应;另外,也可以在CPUCPU外外部的中断控制器部的中断控制器(8259A)(8259A)中以及各个中以及各个I/OI/O接口电路中对某一接口电路中对某一级中断或某个中断源单独进行屏蔽。

      级中断或某个中断源单独进行屏蔽2.3 8086/80882.3 8086/8088中断系统中断系统107107 当外设的中断请求未被屏蔽,且当外设的中断请求未被屏蔽,且IF=1IF=1,则,则CPUCPU在当前指令在当前指令周期的最后一个周期的最后一个T T状态去采样状态去采样INTRINTR引脚,若有效,引脚,若有效,CPUCPU予予以响应CPUCPU将执行两个连续的中断响应周期,送出两个将执行两个连续的中断响应周期,送出两个中断响应信号中断响应信号 -INTA-INTA☞☞第一个响应周期,将地址及数据总线置高阻,响应中断;第一个响应周期,将地址及数据总线置高阻,响应中断;☞☞在第二个响应周期,外设向数据总线输送一个字节的在第二个响应周期,外设向数据总线输送一个字节的中断类型号,中断类型号,CPUCPU读入后,就可在中断向量表中找到该类读入后,就可在中断向量表中找到该类型号的中断服务程序的入口地址,转入中断处理型号的中断服务程序的入口地址,转入中断处理对于非屏蔽中断和软件中断,其中断类型号由对于非屏蔽中断和软件中断,其中断类型号由CPUCPU内部自内部自动提供,不需去执行中断响应周期读取中断类型号。

      动提供,不需去执行中断响应周期读取中断类型号2.3 8086/80882.3 8086/8088中断系统中断系统可屏蔽中断可屏蔽中断INTR108108 8086/80888086/8088中断源的优先级中断源的优先级8086/80888086/8088中断源的优先级顺序由高到低依次为:中断源的优先级顺序由高到低依次为:软件中断软件中断( (除单步中断外除单步中断外) )、非屏蔽中断、可屏蔽中、非屏蔽中断、可屏蔽中断、单步中断断、单步中断在在PCPC机系统中,外设的中断请求通过中断控制器机系统中,外设的中断请求通过中断控制器8259A8259A连接到连接到CPUCPU的的INTRINTR引脚,外设中断源的优先引脚,外设中断源的优先级别由级别由8259A8259A进行管理进行管理2.3 8086/80882.3 8086/8088中断系统中断系统109109 2.3.4 中断向量表中断向量表中断向量表中断向量表是存放中断向量的一个特定的内存是存放中断向量的一个特定的内存区域所谓区域所谓中断向量中断向量,就是中断服务程序的入,就是中断服务程序的入口地址对于口地址对于8086/80888086/8088系统,所有中断服务系统,所有中断服务程序的入口地址都存放在中断向量表中。

      程序的入口地址都存放在中断向量表中2.3 8086/80882.3 8086/8088中断系统中断系统110110 8086/80888086/8088可以处理可以处理256256种中断,每种中断对应种中断,每种中断对应一个中断类型号,每个中断类型号与一个中断一个中断类型号,每个中断类型号与一个中断服务程序的入口地址相对应服务程序的入口地址相对应每个中断服务程每个中断服务程序的入口地址占序的入口地址占4 4个存储单元个存储单元,其中低地址的,其中低地址的两个单元存放中断服务程序入口地址的偏移量两个单元存放中断服务程序入口地址的偏移量(IP)(IP);高地址的两个单元存放中断服务程序入;高地址的两个单元存放中断服务程序入口地址的段地址口地址的段地址(CS)(CS)256256个中断向量要占个中断向量要占256×4256×4==10241024个单元,即中断向量表长度为个单元,即中断向量表长度为1 1 K K个单元8086/80888086/8088系统的中断向量表位系统的中断向量表位于内存的前于内存的前1K1K字节,地址范围为字节,地址范围为00000H~003FFH00000H~003FFH。

      2.3 8086/80882.3 8086/8088中断系统中断系统111111 ……用户自定义中断用户自定义中断(224个个)系统保留中断系统保留中断(27个个)00000H 类型类型0中断入口地址中断入口地址00003H (除法出错除法出错)00004H 类型类型1中断入口地址中断入口地址(单步中断单步中断)00007H00008H 类型类型2中断入口地址中断入口地址0000BH (NMI)0000CH 类型类型3中断入口地址中断入口地址0000FH (断点中断断点中断)00010H 类型类型4中断入口地址中断入口地址00013H (溢出中断溢出中断)00014H 类型类型5中断入口地址中断入口地址0007FH 类型类型31中断入口地址中断入口地址00080H 类型类型32中断入口地址中断入口地址003FCH 类型类型255中断入口地址中断入口地址8086/80888086/8088的的中断向量表中断向量表专用中断专用中断(5个个)IP内容内容CS内容内容中断向量表中有中断向量表中有5 5个专用中个专用中断断( (类型类型0~0~类型类型4)4),它们已,它们已经有固定用途;经有固定用途;2727个系统保个系统保留的中断留的中断( (类型类型5~5~类型类型31)31)供供系统使用,不允许用户自行系统使用,不允许用户自行定义;定义;224224个用户自定义中个用户自定义中断断( (类型类型32~32~类型类型255)255),这些,这些中断类型号可供软中断中断类型号可供软中断INTINTn n或可屏蔽中断或可屏蔽中断INTRINTR使用,使用,使用时,使用时,要由用户自行填入要由用户自行填入相应的中断服务程序入口地相应的中断服务程序入口地址址。

      (其中有些中断类型已其中有些中断类型已经有了固定用途,例如,类经有了固定用途,例如,类型型21H21H的中断已用做的中断已用做DOSDOS的系的系统功能调用统功能调用) )112112 由于中断服务程序入口地址在中断向量表中是按中断类型由于中断服务程序入口地址在中断向量表中是按中断类型号顺序存放的,因此每个中断服务程序入口地址在中断向号顺序存放的,因此每个中断服务程序入口地址在中断向量表中的位置可由量表中的位置可由““中断类型号中断类型号×4”×4”计算出来计算出来☞☞CPUCPU响应中断时,把响应中断时,把中断类型号中断类型号N N乘以乘以4 4,得到对应地址,得到对应地址4N(4N(该中断服务程序入口地址所占该中断服务程序入口地址所占4 4个单元的第一个单元的个单元的第一个单元的地址地址) ),然后把由此地址开始的两个低字节单元,然后把由此地址开始的两个低字节单元(4N(4N,,4N+1)4N+1)的内容装入的内容装入IPIP寄存器,再把两个高字节单元寄存器,再把两个高字节单元(4N+2(4N+2,,4N+3)4N+3)的内容装入的内容装入CSCS寄存器,寄存器,于是于是CPUCPU转入中断类型号为转入中断类型号为N N的中的中断服务程序。

      断服务程序采用向量中断,采用向量中断,CPUCPU可直接通过向量表转向相应的处理程可直接通过向量表转向相应的处理程序,而不需要去逐个检测和确定中断源,因而可以大大加序,而不需要去逐个检测和确定中断源,因而可以大大加快中断响应的速度快中断响应的速度2.3 8086/80882.3 8086/8088中断系统中断系统113113 例如:例如:类型号为类型号为17H17H的中断处理子程序存放在的中断处理子程序存放在23452345::7890H7890H开始的内存区域中开始的内存区域中而而17H17H中断对应的中断向量存放在中断对应的中断向量存放在00000000::005CH005CH处,所以,处,所以,0 0段段005CH005CH、、005DH005DH、、005EH005EH和和005FH005FH这这4 4个单元中的数值分别为:个单元中的数值分别为:90H90H、、78H78H、、45H45H及及23H23H17H=23D23D*4=92D92D=5CHCS:IP= 2345::7890H23H45H78H90HIPCS005FH005EH005DH005CH两个低字节单元两个低字节单元(4N(4N,,4N+1)4N+1)的内容装入的内容装入IPIP寄存器,再把两寄存器,再把两个高字节单元个高字节单元(4N+2(4N+2,,4N+3)4N+3)的内容装入的内容装入CSCS寄存器。

      寄存器2.3 8086/80882.3 8086/8088中断系统中断系统114114 2.3.5 8086/8088的中断处理过程的中断处理过程中断处理过程中断处理过程FLAGS FLAGS 入栈入栈N N完成一条指令完成一条指令N NTEMP=1?TEMP=1?Y YN NN NTF=1TF=1??有有NMINMI中断吗?中断吗?N N有有INTRINTR中断吗?中断吗?有内部有内部中断吗?中断吗?N N中断类型号中断类型号2 2IF=1IF=1??N N中断类型号中断类型号1 1令令TEMP=TFTEMP=TF清清IFIF、、TFTFFLAGSFLAGS出栈出栈返回断点返回断点中断服务中断服务IPIP、、CSCS出栈出栈CSCS、、IPIP入栈入栈转中断处理程序转中断处理程序有有NMI?NMI?Y Y 从指令中或内部从指令中或内部 (1)(1)获得中断类型号获得中断类型号(1)(1)(1)(1)Y Y 从外部得到从外部得到中断类型号中断类型号(1)(1)(2)(2)(3)(3)(4)(4)(5)(5)Y YY YY YY Y(1)(1)∼ ∼(5)(5)是是CPUCPU的的内部处理,由硬内部处理,由硬件自动完成。

      流件自动完成流程图实际上还表程图实际上还表示出了示出了8086/80888086/8088系统系统中各中断源优先中各中断源优先级的高低级的高低2.3 8086/80882.3 8086/8088中断系统中断系统软件中断软件中断( (除单步中断外除单步中断外) )、非屏、非屏蔽中断、可屏蔽中断、单步中断蔽中断、可屏蔽中断、单步中断单步中断单步中断115115 中断服务程序的设计中断服务程序的设计中断服务程序的一般结构中断服务程序的一般结构若一个中断处理能被更高级别若一个中断处理能被更高级别的中断源中断,则需加入开中的中断源中断,则需加入开中断指令在中断服务程序的最后,一定在中断服务程序的最后,一定要有中断返回指令,以保证断要有中断返回指令,以保证断点的恢复点的恢复用户在设计中断服务程序时要用户在设计中断服务程序时要预先确定一个中断类型号,不预先确定一个中断类型号,不论是采用软件中断还是硬件中论是采用软件中断还是硬件中断,都只能在系统预留给用户断,都只能在系统预留给用户关中断保护现场开中断开中断中断服务恢复现场的类型号中选择的类型号中选择中断返回2.3 8086/80882.3 8086/8088中断系统中断系统224224个用户自定义中断个用户自定义中断( (类型类型32~32~类型类型255)255)116116 设置中断服务程序入口地址的方法设置中断服务程序入口地址的方法1 1..DOSDOS系统功能调用法系统功能调用法功能号:功能号:(AH)=25H(AH)=25H。

      入口参数:入口参数:(AL)=(AL)=中断类型号中断类型号 (DS)=(DS)=中断服务程序入口地址的段地址中断服务程序入口地址的段地址(DX)=(DX)=中断服务程序入口地址的偏移地址中断服务程序入口地址的偏移地址以下程序段完成中断类型号为以下程序段完成中断类型号为60H60H的入口地址置入:的入口地址置入:PUSH DS;保护;保护DSMOV DX,,OFFSET INT60H ;取服务程序偏移地址;取服务程序偏移地址MOV AX,,SEG INT60HMOV DS,,AXMOV AH,,25HMOV AL,,60HINT 21HPOP DS;取服务程序段地址;取服务程序段地址;送功能号;送功能号;送中断类型号;送中断类型号;;DOS功能调用功能调用;恢复;恢复DS2.3 8086/80882.3 8086/8088中断系统中断系统117117 2 2.直接装入法.直接装入法用传送指令直接将中断服务程序首地址置入向量表中用传送指令直接将中断服务程序首地址置入向量表中设中断类型号为类型号为60H(60H(此类型号对应的向量表地址为从此类型号对应的向量表地址为从00180H00180H开始的四开始的四个连续存储单元个连续存储单元) ),中断服务子程序符号名为,中断服务子程序符号名为INT60HINT60H。

      程序段如程序段如下:下:XORMOVMOVAX,,AXDS,,AXAX,,OFFSET INT60HMOVDS::[0180H],,AX;置服务程序偏移地址;置服务程序偏移地址MOVMOVAX,,SEG INT60HDS::[0180H+2],,AX ;;置服务程序所在代码段的段地址置服务程序所在代码段的段地址2.3 8086/80882.3 8086/8088中断系统中断系统118118 2.4.1 8086/80882.4.1 8086/8088的指令系统的指令系统Ø指令指令是让计算机完成某种操作的命令,指令的集合称为是让计算机完成某种操作的命令,指令的集合称为指令系统指令系统Ø指令语言是面向机器的语言,任何一种汇编语言的指令指令语言是面向机器的语言,任何一种汇编语言的指令语句都是与机器指令一一对应的,它通过汇编程序将其翻语句都是与机器指令一一对应的,它通过汇编程序将其翻译成机器指令代码(目标代码),让译成机器指令代码(目标代码),让CPUCPU执行某种操作执行某种操作Ø用汇编语言编写的汇编语言程序输入计算机后,必须由用汇编语言编写的汇编语言程序输入计算机后,必须由““汇编程序汇编程序””将它翻译成由机器指令将它翻译成由机器指令( (指令码指令码) )组成的机器组成的机器语言程序,才能由计算机识别并执行。

      因此汇编语言程序语言程序,才能由计算机识别并执行因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序一般来说,需由汇编程序翻译成可执行的机器语言程序一般来说,这一过程不必由人来干预这一过程不必由人来干预2.4 8086/80882.4 8086/8088指令系统指令系统119119 8086/80888086/8088指令系统采用了一种灵活的、由指令系统采用了一种灵活的、由1-61-6个字节组成个字节组成的变字长的指令格式,包括的变字长的指令格式,包括操作码、寻址方式以及操作数操作码、寻址方式以及操作数三个部分三个部分MOD OPCODEOPCODEdata/disp_8data/disp_LoOPCODEOPCODEMODMODdisp_LoOPCODEMODdisp_Hidata_8disp_LoOPCODEMODdisp_Hidata_Lodata_Hi通常指令的第一字节为操作码字节通常指令的第一字节为操作码字节(OPCODE),规定指令的操作类型;第,规定指令的操作类型;第二字节二字节为寻址方式字节为寻址方式字节(MOD),规定操,规定操作数的寻址方式;接着以后的作数的寻址方式;接着以后的3~~6字节字节依据指令的不同而取舍,可依据指令的不同而取舍,可变字长的指变字长的指令主要体现在这里,一般由它指出存储令主要体现在这里,一般由它指出存储器操作数地址的位移量或立即数。

      器操作数地址的位移量或立即数data/disp_Hi2.4 8086/80882.4 8086/8088指令系统指令系统120120 n操作数的种类操作数的种类Ø数据操作数:数据操作数:这类操作数是与数据有关的操作数,这类操作数是与数据有关的操作数,即指令中操作的对象是数据数据操作数又可分为:即指令中操作的对象是数据数据操作数又可分为:((1 1)立即数操作数;(指令中要操作的数据包含在指令中))立即数操作数;(指令中要操作的数据包含在指令中)((2 2)寄存器操作数)寄存器操作数(指令中要操作的数据包含在寄存器中)(指令中要操作的数据包含在寄存器中)((3 3)存储器操作数)存储器操作数(指令中要操作的数据包含在指定的存储单元中)(指令中要操作的数据包含在指定的存储单元中)((4 4))I/OI/O操作数操作数(指令中要操作的数据来自或送到(指令中要操作的数据来自或送到I/OI/O端口)端口)对于数据操作数,有的指令有两个操作数:一个是源操作数,在操作过程中对于数据操作数,有的指令有两个操作数:一个是源操作数,在操作过程中它的值不改变;另一个是目的操作数,操作后一般被操作结果取代有的指它的值不改变;另一个是目的操作数,操作后一般被操作结果取代。

      有的指令只有一个操作数,或没有(或隐含)操作数令只有一个操作数,或没有(或隐含)操作数2.4 8086/80882.4 8086/8088指令系统指令系统1 1))MOV ALMOV AL,,80H80H2 2))INC CXINC CX3 3))MOV AXMOV AX,,[1070H][1070H]4 4))OUT DXOUT DX,,ALAL IN IN,,ALAL,,DXDX5 5))MUL 50HMUL 50H121121 2.4 8086/80882.4 8086/8088指令系统指令系统n操作数的种类操作数的种类Ø地址操作数:地址操作数:这类操作数是与程序转移有关的操作这类操作数是与程序转移有关的操作数,即指令中操作的对象不是数据,而是要转移的目数,即指令中操作的对象不是数据,而是要转移的目标地址地址操作数可分为:标地址地址操作数可分为:((1 1)立即数操作数;(转移的目标地址包含在指令中))立即数操作数;(转移的目标地址包含在指令中)((2 2)寄存器操作数)寄存器操作数(转移的目标地址保存在寄存器中)(转移的目标地址保存在寄存器中)((3 3)存储器操作数)存储器操作数(转移的目标地址存储在存储单元中)(转移的目标地址存储在存储单元中)对于地址操作数,指令只有一个目的操作数,它是一个供程序转移的目标地址。

      对于地址操作数,指令只有一个目的操作数,它是一个供程序转移的目标地址1 1))LEA AXLEA AX,,[2728][2728]2 2))MOV SIMOV SI,, OFFSET A1OFFSET A1122122 2.4.2 2.4.2 寻址方式寻址方式寻址方式就是指指令中给出的寻找操作数的方法根据操作数的种类,8086/8088指令系统的寻址方式分为两大类:数据寻址方式: 寻找数据操作数的方法,具体分为四种类型:立即数寻址方式寄存器寻址方式存储器寻址方式I/O端口寻址方式地址寻址方式:寻找地址操作数的方法,具体分为四种类型:段内直接寻址方式段内间接寻址方式段间直接寻址方式段间间接寻址方式数据寻址地址寻址2.4 8086/80882.4 8086/8088指令系统指令系统123123 立即数寻址方式立即数寻址方式(Immediate Addressing(Immediate Addressing)立即数寻址方式所提供的操作数直接包含在指令中,紧跟在操作码之后,它作为指令的一部分,这种操作数称为立即数立即数可以是8位的,也可以是16位的如果是16位数,则高位字节存放在高地址存储单元中,低位字节存放在低地址存储单元中。

      例: “MOV BL,80H”, 结果: (BL)=80H“MOV AX,1090H”,结果: (AX)=1090HBL存储器操作码80HAX10H存储器操作码90H数据寻址124124 寄存器寻址方式寄存器寻址方式(Register Addressing)(Register Addressing)寄存器寻址方式的操作数存放在指令规定的寄存器中,寄存器的名字在指令中指出对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP对于8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH或DL例:“MOV CL,DL”,若(DL)=50H,执行结果: (CL)=50H“MOV AX,BX”,若(BX)=1234H,执行结果:(AX)=1234HCLDL50HAX12H34HBX由于寄存器寻址方式的操作数就在由于寄存器寻址方式的操作数就在CPUCPU内部的寄存器中,不需要访问存内部的寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运行速度储器来取得操作数,因而可以取得较高的运行速度数据寻址INC CX;; 将将CX内容加内容加1ROL AH,,1;将;将AH内容循环左移内容循环左移1位位125125 存储器寻址方式存储器寻址方式(Memory Addressing)(Memory Addressing)。

      存储器寻址方式的操作数存放在存储单元中,而操作数在存储器中的物理地址是由段地址左移4位与操作数在段内的偏移地址相加得到的偏移地址又称为有效地址(Effective Address,EA),所以存储器寻址方式即为求得有效地址(EA)的不同途径有效地址可以由以下三种地址分量组成:位移量(Displacement):存放在指令中的一个8位或16位的数,该数不是立即数,而是一个地址基址(Base Address):存放在基址寄存器BX或BP中的内容变址(Index Address):存放在变址寄存器SI或DI中的内容对于某条具体指令,上述三个地址分量可有不同的组合如果存在两个或两个以上的分量,那么就需要进行加法运算,求出操作数的有效地址(EA),进而求出物理地址(PA)正是因为这三种地址分量有不同的组合,才使得对存储器操作数的寻址产生了若干种不同的方式数据寻址126126 ①①存储器寻址方式存储器寻址方式-直接寻址方式直接寻址方式(Direct Addressing)(Direct Addressing)直接寻址方式的操作数有效地址只包含位移量一种分量,即在指令的操作码后面直接给出有效地址对这种寻址方式有:EA=位移量。

      如果指令前没有前缀指明,则默认DS例如:MOV AL,[1064H]如果(DS)=2000H,则指令执行结果为:(AL)=45H操作码64H10H…45H20000H+ 1064H21064HAL20000H…21064H存储器代码段数据段在直接寻址方式中,对于表示有效地址的在直接寻址方式中,对于表示有效地址的16位数,必须加上方括号位数,必须加上方括号数据寻址127127 如果没有特殊指明,直接寻址方式的操作数一般在存储器的数据段中,即隐含的段寄存器是DS但是8086/8088也允许段超越,此时需要在指令中特别标明,方法是在有关操作数的前面写上操作数所在段的段寄存器名,再加上冒号例如,若以上指令中源操作数不在数据段而在附加数据段中,则指令应写为如下形式:例如:1))MOV AL,,ES::[1064H]将将ES段的段的1064H单元内容送单元内容送AL数据寻址2))CS:MOV BX,[3000H];;将将CS段的段的3000H和和3001H两单元内容送两单元内容送BX128128 ② 寄存器间接寻址方式寄存器间接寻址方式(Register Indirect Addressing)采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由地址由BXBX、、BPBP、、SISI、、DIDI给出,即有效地址等于其中某一个寄存器的值。

      给出,即有效地址等于其中某一个寄存器的值 [BX] [BP]EA= [SI] [DI]在汇编指令表示中,用做间址的寄存器必须加上方括弧,在汇编指令表示中,用做间址的寄存器必须加上方括弧,以免与一般的寄存器寻址方式混淆例如:以免与一般的寄存器寻址方式混淆例如:MOV AX,,[SI]MOV [BX],,AL129129 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H指令“MOV AX,[SI]”执行结果:(AX)=4050H指令“MOV [BX],AL” 执行结果:(31000H)=64H…50H40H寄存器间接寻址方式也允许段超越 例如:MOV ES:[DI],AX…64H存储器存储器(DS)×10H= 30000H+ (SI)= 2000H32000HAX(DS)×10H= 30000H+ (BX)= 1000H31000HAL30000H…32000H30000H…31000H数据寻址130130 ③ ③ 寄存器相对寻址方式寄存器相对寻址方式(Register Relative Addressing)寄存器相对寻址方式的操作数有效地址EA是一个基址寄存器或变址寄存器的内容和指令中给定的8位或16位位移量相加之和,所以有效地址由两种分量组成。

      在一般情况下,若指令中指定的寄存器是BX、SI、DI,则操作数默认为存放在数据段中;若指令中指定的寄存器是BP,则操作数默认为存放在堆栈段中寄存器相对寻址方式也允许段超越位移量既可以是一个8位或16位的立即数,也可以是符号地址例如:MOV [SI+10H],AXMOV CX,[BX+COUNT]可用做寄存器相对寻址方式的寄存器有基址寄存器BX、BP和变址寄存器SI、DI即:(SI)(DI)(BX)(BP)EA=+disp–8/disp–16位移量可以看成是一个存放于寄存器中的基值的一个相对值,故称为寄存器相对寻址方式数据寻址131131 如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H指令“MOV [SI+10H],AX”执行结果: (32010H)=4050H指令“MOV CX,[BX+COUNT] ”执行结果 :(CX)=4030H10H30H40H 50H存储器操作码操作码10H存储器操作码操作码50HAXCX30000H…32010H30000H…32050H(DS)×10H= 30000H(SI)= 2000H+ 10H32010H(DS)×10H= 30000H(SI)= 1000H+ COUNT= 1050H32050H40H汇编指令汇编指令“MOV AL,,[BP+TABLE]”也可写成也可写成“MOV AL,,[BP]+ TABLE”或或“MOV AL,,TABLE[BP]”形式,其中形式,其中TABLE可为可为8位或位或16位位移量。

      位位移量数据寻址132132 ④ ④ 基址变址寻址方式基址变址寻址方式(Based Indexed Addressing)基址变址寻址方式的操作数有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之和,所以有效地址由两种分量组成即: 在一般情况下,由基址寄存器决定操作数在哪个段中若用BX的内容作为基地址,则操作数在数据段中;若用BP的内容作为基地址,则操作数在堆栈段中例如:MOV [BX+DI],AXMOV AH,[BP][SI]基址变址寻址方式同样也允许段超越133133 设当前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=1200H指令“MOV [BX+DI],AX”执行结果:(32100H)=0050H指令“MOV AH,[BP][SI]”执行结果:(AH)=56H56H30000H…32100H40000H…43200H存储器…存储器…(DS)×10H= 30000H(BX)= 1000H+ (DI)= 1100H32100HAX00H 50H(SS)×10H= 40000H(BP)= 2000H+ (SI)= 1200H43200HAH134134 ⑤ ⑤ 基址变址相对寻址方式基址变址相对寻址方式(Based Indexed(Based IndexedRelative Addressing)Relative Addressing)基址变址相对寻址方式的操作数有效地址是一个基址寄存器内容、一个变址寄存器内容与指令中指定的一个8位或16位位移量之和,所以有效地址由三个分量组成。

      即:当基址寄存器为BX时,操作数在数据段中;基址寄存器为BP时,操作数在堆栈段中例如:MOV AH,[BX+DI+1234H]MOV [BP+SI+DATA],CX基址变址相对寻址方式同样也允许段超越135135 若(DS)=4000H,(SS)=5000H,(BX)=1000H,(DI)=1500H,(BP)=2000H,(SI)=1050H,(CX)=2050H,DATA=10H指令“MOV AH,[BX+DI+1234H]”执行结果: (AH)=64H指令“MOV [BP+SI+DATA],CX”执行结果:50000H…53060H(53060H)=2050H存储器40000H…43734H64H存储器(DS)×10H= 40000H(BX)= 1000H(DI)= 1500H+ 1234H43734HAH(SS)×10H= 50000H(BP)= 2000H(SI)= 1050H+ 10H53060HCX20H 50H汇编指令“MOV AX,[BX+SI+COUNT]”也可写成:“MOV AX,[BX][SI +COUNT]”或“MOV AX,[BX+SI]COUNT ”或“MOV AX,[BX][SI]COUNT”或“MOV AX,COUNT[BX][SI]”。

      数据寻址136136 ……I/OI/O端口寻址方式端口寻址方式① ① 端口直接寻址方式端口直接寻址方式端口地址用8位立即数(0-255)表示例如:指令“IN AL,21H” 表示从地址为21H的端口中读取数据送到AL中假设21H端口提供的数据为7FH,则指令执行结果是将21H端口提供的数据7FH输入到8位寄存器AL中7FH接口端口0端口1端口33端口25500H01H21HFFHAL数据寻址137137 ……② ② 端口间接寻址方式端口间接寻址方式当当I/OI/O端口地址大于端口地址大于FFHFFH时,必须事先将端口地址存放在时,必须事先将端口地址存放在DXDX寄存器中寄存器中例如:指令序列“MOV DX,120H”、“OUT DX,AL”,前一条指令将端口地址120H送到DX寄存器,后一条指令将AL中的内容输出到地址由DX寄存器内容所指定的端口中若(AL)=F0H,则指令执行结果是将AL寄存器提供的数据F0H输出到120H端口DX0120HALF0H0000H0001H0120HFFFFH端口65535接口端口0端口1端口288数据寻址138138 地址寻址段内直接寻址方式段内直接寻址方式段内直接寻址方式也称为相对寻址方式。

      段内直接寻址方式也称为相对寻址方式转移的地址是当前的IP内容和指令规定的下一条指令到目标地址之间的8位或16位相对位移量之和,相对位移量可正可负当位移量是8位时,称为短转移,转移范围为−128~+127;位移量是16位时,称为近转移,转移范围为−32768~+32767这种寻址方式适用于无条件转移或条件转移类指令但条件转移里只有8位位移量的短转移例如:JMP NEAR PTR PROGIAJMP SHORT QUESTPROGIA和QUEST均为转向的目标地址,在机器指令中,用位移量来表示在汇编语言中,如果位移量为如果位移量为16位,则在目位,则在目标地址前加操作符标地址前加操作符NEAR PTR;如果位移量为8位,则在目;如果位移量为8位,则在目标地址前加操作符标地址前加操作符SHORT如果目标地址的标号前没有显式给出操作符,汇编程序可自动根据隐含信息或相对位置生成2字节的短转移指令或3字节的近转移指令139139 段内间接寻址方式段内间接寻址方式段内间接寻址方式的程序转移地址存放在寄存器或存储单元中存储器可用各种数据寻址方式表示指令的操作是用指定的寄存器或存储器中的值取代当前IP的内容,以实现程序的段内转移。

      段内间接寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令所以条件转移指令只能使所以条件转移指令只能使用段内直接寻址的8位位移量用段内直接寻址的8位位移量例如:JMP BXJMP WORD PTR [BP+TABLE]WORD PTR为操作符,用以指出其后的寻址方式所取得的目标地址是一个字的有效地址地址寻址140140 段间直接寻址方式段间直接寻址方式段间直接寻址方式是在指令中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP的内容例如:JMP LABEL_NAMEJMP FAR PTR NEXTROUTINTLABEL_NAME是一个在另外的代码段内已定义的远标号指令的操作是用标号的偏移地址取代指令指针寄存器IP的内容,同时用标号所在段的段地址取代当前代码段寄存器CS的内容,结果使程序转移到另一代码段内指定的标号处FAR PRT运算符是将标号NEXTROUTINT的属性定义为FAR地址寻址141141 段间间接寻址方式段间间接寻址方式段间间接寻址方式是由指令中给出的存储器寻址方式求出存放转移地址的四个连续存储单元的地址指令的操作是将存储器的前两个单元的内容送给IP,后两个单元的内容送给CS,以实现到另一个段的转移。

      例如:JMP VAR_DOUBLEWORDJMP DWORD PTR[BP][DI]VAR_DOUBLEWORD应是一个已定义为32位的存储器变量; DWORD PTR操作符则是将存储器操作数的类型定义为DWORD(双字,32位)地址寻址142142 2.4.3 8086/80882.4.3 8086/8088指令的种类指令的种类1)数据传送指令数据传送指令2 2)算术运算指令)算术运算指令3 3)位操作指令)位操作指令4 4)串操作指令)串操作指令5 5)程序控制指令)程序控制指令6 6)处理器控制指令)处理器控制指令2.4 8086/80882.4 8086/8088指令系统指令系统143143 数据传送指令数据传送指令数据传送指令是程序中使用最频繁的指令这是因为不论程序针对何种具体的实际问题,往往都需要将原始数据、中间结果、最终结果以及其他各种信息在CPU的寄存器和存储器或I/O端口之间多次传送数据传送指令按其功能的不同可分为四组:Ø通用数据传送指令通用数据传送指令Ø输入输出指令输入输出指令Ø目标地址传送指令目标地址传送指令Ø标志传送指令标志传送指令2.4 8086/80882.4 8086/8088指令系统指令系统144144 (1) (1) 最基本的传送指令最基本的传送指令MOV (MOVement)MOV (MOVement)MOV dst,src;(dst)←(src)指令格式中的dst表示目的操作数,src表示源操作数。

      指令实现的操作是将源操作数送给目的操作数这种传送实际上是进行数据的数据的“复制复制”,源操作数本身不变,源操作数本身不变这种双操作数指令在汇编语言中的表示方法,总是将目的操作数写在前面,源操作数写在后面,二者之间用一个逗号隔开在在MOVMOV指令中源操作数可以是存储器、寄存器、段寄存器和立即指令中源操作数可以是存储器、寄存器、段寄存器和立即数;目的操作数可以是存储器、寄存器数;目的操作数可以是存储器、寄存器( (不能为不能为IPIP) )和段寄存器和段寄存器( (不能为不能为CSCS) )串操作指令程序控制指令2.4 8086/80882.4 8086/8088指令系统指令系统145145 (1) (1) 最基本的传送指令最基本的传送指令MOVMOV2.4 8086/80882.4 8086/8088指令系统指令系统MOV AL,,BL ;;BL中的中的8位数送位数送ALMOV ES,,DX ;;DX中的中的16位数据送位数据送ESMOV AX,,[BX] ;;[BX]和和[BX+1]两内存单元内容送两内存单元内容送AXMOV [DI],,AX ;累加器内容送;累加器内容送[DI]和和[DI+1]两内存单元两内存单元MOV CX,,[1000] ;; 1000和和1001两单元内容送两单元内容送CXMOV BL,,40 ;立即数;立即数40送送BLMOV DX,,5040 ;立即数;立即数5040送送DXMOV WORD PTR[SI],,6070;立即数;立即数6070送和送和SI和和SI+1两单元。

      两单元不能用一条不能用一条MOVMOV指令实现以下传送:指令实现以下传送:① ① 存储单元之间的传送存储单元之间的传送② ② 立即数至段寄存器的传送立即数至段寄存器的传送③ ③ 段寄存器之间的传送段寄存器之间的传送146146 (2) (2) 堆栈操作指令堆栈操作指令Ø子程序调用和中断处理过程子程序调用和中断处理过程时,分别要保存返回地址和断时,分别要保存返回地址和断点地址,在进入子程序和中断处理后,还需要保留通用寄存点地址,在进入子程序和中断处理后,还需要保留通用寄存器的值;子程序返回和中断处理返回时,则要恢复通用寄存器的值;子程序返回和中断处理返回时,则要恢复通用寄存器的值,并分别将返回地址或断点地址恢复到指令指针寄存器的值,并分别将返回地址或断点地址恢复到指令指针寄存器中这些功能都要通过堆栈来实现,其中寄存器的保存和器中这些功能都要通过堆栈来实现,其中寄存器的保存和恢复需要由堆栈指令来完成恢复需要由堆栈指令来完成Ø采用堆栈操作指令时,应预置堆栈段寄存器采用堆栈操作指令时,应预置堆栈段寄存器SSSS、堆栈指针、堆栈指针SPSP的值,同时,使的值,同时,使SPSP的内容为当前堆栈段的栈顶。

      的内容为当前堆栈段的栈顶Ø堆栈操作指令中的操作数类型必须是堆栈操作指令中的操作数类型必须是字操作数字操作数,即,即1616 位操位操作数Ø其中其中PUSHPUSH是把字压入堆栈;是把字压入堆栈;POPPOP是把字弹出堆栈是把字弹出堆栈2.4 8086/80882.4 8086/8088指令系统指令系统147147 (2) (2) 堆栈操作指令堆栈操作指令①①压入堆栈指令压入堆栈指令PUSH (PUSH word onto stack)PUSH (PUSH word onto stack)PUSH src ;(SP)←(SP)−2,((SP)+1:(SP))←(src)指令完成的操作是“先移后入先移后入”,即先将堆栈指针先将堆栈指针SP减减2,使,使SP始终指向栈顶,然后再将操作数始终指向栈顶,然后再将操作数src压入压入(SP)+1和和(SP)两两个存储单元中个存储单元中指令中的操作数src可以是通用寄存器和段寄存器,也可以是由某种寻址方式所指示的存储单元,但不能是立即数不能是立即数例如:PUSH AX ;(SP)←(SP)−2,((SP)+1)←(AH),((SP))←(AL)PUSH CSPUSH [SI]2.4 8086/80882.4 8086/8088指令系统指令系统148148 (2) (2) 堆栈操作指令堆栈操作指令②②弹出堆栈指令弹出堆栈指令POP (POP word off stack)POP (POP word off stack)POP dst ;(dst)←((SP)+1:(SP)),(SP)←(SP)+2指令完成的操作是“先出后移”,即先将堆栈指针SP所指示的栈顶存储单元的值弹出到操作数dst中,然后再将堆栈指针SP加2,使其指向栈顶。

      指令中的操作数dst可以是存储器、通用寄存器或段寄存器(但不能是代码段寄存器不能是代码段寄存器CS),同样也不能是立即数不能是立即数例如:POP BX;(BL)←((SP)),(BH)←((SP)+1),(SP)←(SP)+2POP ESPOP MEM[DI]2.4 8086/80882.4 8086/8088指令系统指令系统149149 (2) 2) 堆栈操作指令堆栈操作指令2.4 8086/80882.4 8086/8088指令系统指令系统例如,将例如,将16位通用寄存器位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至的内容压入堆栈,然后,弹出栈顶至CX中已知已知:(:(SS))=0200H,(,(SP))=0008H,(,(CX))=12FAH,,PUSH CXPUSH CX指令操作过程指令操作过程0200020000080008* *1616+…FAFA1212原栈顶原栈顶新栈顶新栈顶12FA12FACXCXSPSPSSSS020080200802006020060200702007-20200020000060006* *1616+…FAFA1212新栈顶新栈顶原栈顶原栈顶12FA12FACXCXSPSPSSSS020080200802006020060200702007POP CXPOP CX指令操作过程指令操作过程+2150150 (2) 2) 堆栈操作指令堆栈操作指令2.4 8086/80882.4 8086/8088指令系统指令系统堆栈中的内容是按后进先出的次序传送的。

      PUSH DXPUSH DXPUSH EXPUSH EX…………POP EXPOP EXPOP DXPOP DX例如:在一段子程序中需要保存段寄存器DS和ES的内容,在子程序结束时,则要恢复相应的DS和ES内容,程序如下:151151 (3) (3) 数据交换指令数据交换指令XCHGXCHGXCHG dst,src;(dst)←→(src)指令操作是使源操作数与目的操作数进行交换1)交换指令的源操作数和目的操作数各自均可以是寄)交换指令的源操作数和目的操作数各自均可以是寄存器或存储器,但存器或存储器,但不能二者同时为存储器不能二者同时为存储器也就是说,可以在寄存器与寄存器之间,或者寄存器与存说,可以在寄存器与寄存器之间,或者寄存器与存储器之间进行交换此外,储器之间进行交换此外,段寄存器的内容不能参段寄存器的内容不能参加交换加交换2 2)交换的内容可以是一个字节)交换的内容可以是一个字节(8位位),也可以是一个字,也可以是一个字(16位位)2.4 8086/80882.4 8086/8088指令系统指令系统XCHG ALXCHG AL,,BLBLXCHG BXXCHG BX,,CXCXXCHG [2530]XCHG [2530],,CXCX152152 (4) (4) 换码指令换码指令XLATXLATXLAT src_table;(AL)←((BX)+(AL))1 1))XLATXLAT指令是字节查表转换指令,可以根据表中元素的序指令是字节查表转换指令,可以根据表中元素的序号,查出表中相应元素的内容。

      号,查出表中相应元素的内容2 2)执行该指令之前,必须建立好一张翻译表)执行该指令之前,必须建立好一张翻译表3 3)为了实现查表转换,预先应将表的首地址,即表头地址传)为了实现查表转换,预先应将表的首地址,即表头地址传送到送到BXBX寄存器,元素的序号即位移量送寄存器,元素的序号即位移量送ALAL,表中第一个,表中第一个元素的序号为元素的序号为0 0,然后依次是,然后依次是1 1,,2 2,,3 3,,……执行XLATXLAT指指令后,表中指定序号的元素存于令后,表中指定序号的元素存于ALAL由于需要将元素的由于需要将元素的序号送序号送ALAL寄存器,所以被寻址的表的最大长度为寄存器,所以被寻址的表的最大长度为255255个字个字节这是一种特殊的节这是一种特殊的基址变址寻址方式基址变址寻址方式,,基址寄存器为基址寄存器为BXBX,变址寄存器为,变址寄存器为ALAL利用XLATXLAT指令实现不同数制或指令实现不同数制或编码系统之间的转换十分方便编码系统之间的转换十分方便2.4 8086/80882.4 8086/8088指令系统指令系统153153 2.4 8086/80882.4 8086/8088指令系统指令系统(4) (4) 换码指令换码指令XLATXLAT例如:将十进制数字(例如:将十进制数字(0~90~9)翻译成七段显示码的译码表,如下:)翻译成七段显示码的译码表,如下:十进制数十进制数字字七段显示码七段显示码 g f e d c b g f e d c b a a0 00 1 0 0 0 0 0 0 1 0 0 0 0 0 0 01 10 1 1 1 1 0 0 0 1 1 1 1 0 0 1 12 20 0 1 0 0 1 0 0 0 1 0 0 1 0 0 03 30 0 1 1 0 0 0 0 0 1 1 0 0 0 0 04 40 1 0 1 1 0 0 0 1 0 1 1 0 0 1 15 50 1 0 1 0 0 1 0 1 0 1 0 0 1 0 06 60 1 0 0 0 0 1 0 1 0 0 0 0 1 0 07 70 1 1 1 1 0 0 0 1 1 1 1 0 0 0 08 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 09 90 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0abcdefg假设该表存放在偏假设该表存放在偏移地址为移地址为2000H2000H开始开始的内存中,取出的内存中,取出““3”3”对应的七段码,对应的七段码,可以用下面的程序可以用下面的程序助记符助记符:MOV BXMOV BX,,2000H2000HMOV ALMOV AL,,3 3XLATXLAT154154 输入输出指令输入输出指令1)输入输出指令共有两条。

      输入输出指令共有两条输入指令输入指令ININ用于从外用于从外设端口读入数据,设端口读入数据,输出指令输出指令OUTOUT则则向端口发送向端口发送数据无论是读入的数据或是准备发送的数据数据无论是读入的数据或是准备发送的数据都都必须放在寄存器必须放在寄存器AL(AL(字节字节) )或或AX(AX(字字) )中中2 2)输入输出指令可以分为两大类:一类是端口直)输入输出指令可以分为两大类:一类是端口直接寻址的输入输出指令;另一类是端口通过接寻址的输入输出指令;另一类是端口通过DXDX寄存器间接寻址的输入输出指令在直接寻址寄存器间接寻址的输入输出指令在直接寻址的指令中只能寻址的指令中只能寻址256256个端口个端口(0~255)(0~255),而间接,而间接寻址的指令中可寻址寻址的指令中可寻址64 K64 K个端口个端口(0~65535)(0~65535)2.4 8086/80882.4 8086/8088指令系统指令系统155155 (1) (1) 输入指令输入指令IN (INput byte or word)IN (INput byte or word)输入指令分直接寻址输入指令和间接寻址输入指令。

      输入指令分直接寻址输入指令和间接寻址输入指令① ① 直接寻址的输入指令:直接寻址的输入指令:IN acc,,port ;;(acc)←←(port)指令中直接给出端口地址指令中直接给出端口地址(地址小于地址小于0FFH),其功能为从指令,其功能为从指令中直接指定的端口中读入一个字节或一个字送中直接指定的端口中读入一个字节或一个字送AL或或AX例如:例如:IN AL,,65HIN AX,,98H② ② 间接寻址的输入指令:间接寻址的输入指令:IN acc,,DX;;(acc)←←((DX))指令从指令从DX寄存器内容指定的端口中将寄存器内容指定的端口中将8/16位数据送入位数据送入AL/AX中这种寻址方式的端口地址由这种寻址方式的端口地址由16位地址表示,执行此指令位地址表示,执行此指令前应将前应将16位地址存入位地址存入DX寄存器中寄存器中例如:例如:IN AL,,DX156156 (2) (2) 输出指令输出指令OUT (OUTput byte or word)OUT (OUTput byte or word)输出指令分直接寻址输出指令和间接寻址输出指令输出指令分直接寻址输出指令和间接寻址输出指令。

      ① ① 直接寻址的输出指令:直接寻址的输出指令:OUT port,,acc ;;(port)←←(acc)指令将指令将AL(8位位)或或AX(16位位)中的数据输出到指令指定的中的数据输出到指令指定的I/O端端口,端口地址应不大于口,端口地址应不大于FFH例如:例如:OUT 21H,,ALOUT 70H,,AX② ② 间接寻址的输出指令:间接寻址的输出指令:OUT DX,acc;((DX))←(acc)此指令将此指令将AL(8位位)或或AX(16位位)中的数据输出到由中的数据输出到由DX寄存器内寄存器内容指定的容指定的I/O端口中例如:例如:OUT DX,,AX157157 目标地址传送指令目标地址传送指令8086/8088 CPU8086/8088 CPU提供了三条把地址指针写入寄存器或寄存器对的指令,提供了三条把地址指针写入寄存器或寄存器对的指令,它们可以用来写入近地址指针和远地址指针它们可以用来写入近地址指针和远地址指针1) (1) 取有效地址指令取有效地址指令LEA (Load Effective Address)LEA (Load Effective Address)LEA reg16,memLEA指令将一个近地址指针写入到指定的寄存器。

      指令中的指令将一个近地址指针写入到指定的寄存器指令中的目的操作数必须是一个目的操作数必须是一个16位通用寄存器位通用寄存器,源操作数必须是一,源操作数必须是一个存储器操作数,指令的执行结果是把源操作数的有效地个存储器操作数,指令的执行结果是把源操作数的有效地址,即址,即16位偏移地址传送到目标寄存器位偏移地址传送到目标寄存器例如:例如:LEA BX,BUFFERLEA AX,[BP][DI];(BX)←OFFSET BUFFER;(AX)←(BP)+(DI);LEA DX,BETA[BX][SI]2.4 8086/80882.4 8086/8088指令系统指令系统;(DI)←(BP)+(SI)+BETA158158 注意注意LEALEA指令与指令与MOVMOV指令的区别,比较下面两条指令:指令的区别,比较下面两条指令: LEA BX,BUFFERMOV BX,BUFFER前者将存储器变量前者将存储器变量BUFFERBUFFER的偏移地址送到的偏移地址送到BXBX,而后者将存储器变量,而后者将存储器变量BUFFERBUFFER的内容的内容( (两个字节两个字节) )传送到传送到BXBX。

      当然也可以用当然也可以用MOVMOV指令来得到存储器的偏移地址,指令来得到存储器的偏移地址,以下两条指令的效果相同:以下两条指令的效果相同: LEA BX,,BUFFER MOV BX,,OFFSET BUFFER其中其中OFFSET BUFFEROFFSET BUFFER表示存储器变量表示存储器变量BUFFERBUFFER的偏移地址的偏移地址2.4 8086/80882.4 8086/8088指令系统指令系统159159 (2) (2) 地址指针装入地址指针装入DSDS指令指令LDS (Load pointerinto DS)LDS (Load pointerinto DS) LDS reg16,,mem32LDSLDS指令和下面即将介绍的指令和下面即将介绍的LESLES指令都是用于写入远地址指令都是用于写入远地址指针源操作数是存储器操作数,目的操作数可以是任一指针源操作数是存储器操作数,目的操作数可以是任一个个1616位通用寄存器位通用寄存器LDSLDS传送一个传送一个4 4字节的远地址指针,其中包括一个偏字节的远地址指针,其中包括一个偏移地址和一个段地址,前者送指令中指定的寄存器移地址和一个段地址,前者送指令中指定的寄存器( (目的操作数目的操作数) ),后者一定送数据段寄存器,后者一定送数据段寄存器DSDS。

      例如:例如:LDS SILDS SI,,[0010H][0010H]设当前设当前(DS)=C000H(DS)=C000H,而有关存储单元的内容为,而有关存储单元的内容为(C0010H)=(C0010H)=8080H H,,(C0011H)=(C0011H)=0101H H,,(C0012H)=(C0012H)=0000H H,,(C0013H)=(C0013H)=2020H H,则执行该指令后,,则执行该指令后,SISI寄存器的内容为寄存器的内容为01800180H H,段寄存器,段寄存器DSDS的内容为的内容为20002000H H2.4 8086/80882.4 8086/8088指令系统指令系统两个字节的低地址:存放偏移量,低位在前;两个字节的低地址:存放偏移量,低位在前;两个字节的高地址,存放两个字节的高地址,存放DSDS的段值160160 (3) (3) 地址指针装入地址指针装入ESES指令指令LES (Load pointerLES (Load pointerinto ES)into ES)LES reg16LES reg16,,mem32mem32LESLES指令与指令与LDSLDS类似,也是装入一个类似,也是装入一个4 4字节的远地址指针。

      字节的远地址指针位移地址送指定寄存器,但是,位移地址送指定寄存器,但是,段地址送附加段寄存器段地址送附加段寄存器ESES目标地址传送指令常常用于在串操作时建立初始的目标地址传送指令常常用于在串操作时建立初始的地址指针地址指针2.4 8086/80882.4 8086/8088指令系统指令系统161161 标志传送指令标志传送指令8086/8088 CPU8086/8088 CPU中有一标志寄存器中有一标志寄存器FLAGSFLAGS,,其中包括其中包括6 6个状态标志位和个状态标志位和3 3个控制位每一状个控制位每一状态标志位表示态标志位表示CPUCPU运行的状态许多指令执行运行的状态许多指令执行结果会影响标志寄存器的某些状态标志位同结果会影响标志寄存器的某些状态标志位同时,有些指令的执行也受标志寄存器中控制位时,有些指令的执行也受标志寄存器中控制位的控制标志传送指令共有的控制标志传送指令共有4 4条这些指令都这些指令都是单字节指令,指令的操作数为隐含形式是单字节指令,指令的操作数为隐含形式2.4 8086/80882.4 8086/8088指令系统指令系统162162 ××××OFDFIFTFSFZF×AF×PF×CF(1) (1) 取标志指令取标志指令LAHF (Load AH from Flags)LAHF (Load AH from Flags)LAHFLAHF1))LAHFLAHF指令将标志寄存器指令将标志寄存器FLAGSFLAGS中的中的5 5个状态标志位个状态标志位SFSF、、ZFZF、、AFAF、、PFPF以及以及CFCF分别取出传送到累加器分别取出传送到累加器AHAH的对应位。

      即把标志寄的对应位即把标志寄存器低存器低8 8位送位送AHAH寄存器2 2))LAHFLAHF指令对状态标志位没有影响指令对状态标志位没有影响AHFLAGS2.4 8086/80882.4 8086/8088指令系统指令系统163163 ××××OFDFIFTFSFZF×AF×PF×CF(2) (2) 置标志指令置标志指令SAHF (Store AH into Flags)SAHF (Store AH into Flags)SAHFSAHFSAHF指令的传送方向与指令的传送方向与LAHFLAHF相反,将相反,将AHAH寄存器中的第寄存器中的第7 7、、6 6、、4 4、、2 2、、0 0位分别传送到标志寄存器的对应位位分别传送到标志寄存器的对应位 即即AHAH内容送标志寄存器低内容送标志寄存器低8 8位位AHFLAGS2.4 8086/80882.4 8086/8088指令系统指令系统164164 (3) (3) 标志压入堆栈指令标志压入堆栈指令PUSHF (PUSH FlagsPUSHF (PUSH Flagsonto stack)onto stack)PUSHF ;(SP)←(SP)−2,((SP)+1):(SP))←(FLAGS)PUSHFPUSHF指令先将指令先将SPSP减减2 2,然后将标志寄存器,然后将标志寄存器FLAGSFLAGS的内的内容容(16(16位位) )压入堆栈。

      该指令本身不影响状态标志位压入堆栈该指令本身不影响状态标志位PUSHF指令可用于调用过程时保护当前标志寄存器的值,过程返回以后再使用POPF指令恢复标志寄存器原来的值4) (4) 标志弹出堆栈指令标志弹出堆栈指令POPF (POP Flags offPOPF (POP Flags offstack)stack)POPF POPF ;;(FLAGS)←((SP)+1(FLAGS)←((SP)+1::(SP))(SP)),,(SP)←(SP)+2(SP)←(SP)+2POPFPOPF指令的操作与指令的操作与PUSHFPUSHF相反,是将堆栈内容弹出到标相反,是将堆栈内容弹出到标志寄存器,然后志寄存器,然后SPSP加加2 2POPFPOPF指令对状态标志位有影指令对状态标志位有影响,使各状态标志位恢复为压入堆栈以前的状态响,使各状态标志位恢复为压入堆栈以前的状态165165 算术运算指令算术运算指令算术运算的数据类型算术运算的数据类型8086/80888086/8088的算术运算指令可以处理的算术运算指令可以处理四种类型的数四种类型的数:无符号:无符号的二进制数、带符号的二进制数、的二进制数、带符号的二进制数、无符号的压缩十进制数无符号的压缩十进制数( (压压缩型缩型BCDBCD码码) )和无符号的非压缩十进制数和无符号的非压缩十进制数( (非压缩型非压缩型BCDBCD码码) )。

      除压缩十进制数只有加除压缩十进制数只有加/ /减运算外,其余三种数据类型都可以减运算外,其余三种数据类型都可以进行加、减、乘、除运算进行加、减、乘、除运算二进制的无符号数和带符号数的长度都可以是二进制的无符号数和带符号数的长度都可以是8 8位或位或1616位,位,但应注意其所能表示的数的范围是不同的但应注意其所能表示的数的范围是不同的若是带符号数,若是带符号数,则用补码表示则用补码表示十进制数以字节的形式存储对压缩十进制数,每个字节存十进制数以字节的形式存储对压缩十进制数,每个字节存两位数,即两位两位数,即两位BCDBCD码,因而对于一个字节来说,压缩十进码,因而对于一个字节来说,压缩十进制数的范围是制数的范围是0~990~99而对非压缩的十进制数,每个字节存一而对非压缩的十进制数,每个字节存一位数,即由字节的低位数,即由字节的低4 4位决定存放的数字,对于高位决定存放的数字,对于高4 4位,在进位,在进行乘行乘/ /除运算时必须全为除运算时必须全为0 0,加,加/ /减运算时可以是任何值减运算时可以是任何值8086/80888086/8088提供的各种调整操作指令可以方便地进行压缩或提供的各种调整操作指令可以方便地进行压缩或 非压缩十进制数的算术运算非压缩十进制数的算术运算2.4 8086/80882.4 8086/8088指令系统指令系统166166 算术运算指令对标志位的影响算术运算指令对标志位的影响8086/80888086/8088的算术运算指令将运算结果的某些特性传送到的算术运算指令将运算结果的某些特性传送到6 6个状态标志位上去,这些标志位中的绝大多数可由跟在个状态标志位上去,这些标志位中的绝大多数可由跟在算术运算指令后的条件转移指令进行测试,以改变程序的算术运算指令后的条件转移指令进行测试,以改变程序的流程。

      因此掌握指令执行结果对标志位的影响,对编程有流程因此掌握指令执行结果对标志位的影响,对编程有着重要的作用着重要的作用算术运算类指令共有算术运算类指令共有2020条,包括加、减、乘、除运算,符条,包括加、减、乘、除运算,符号扩展和十进制调整指令,号扩展和十进制调整指令,除符号扩展指令除符号扩展指令(CBW(CBW,,CWD)CWD)外,其余指令都影响标志位外,其余指令都影响标志位2.4 8086/80882.4 8086/8088指令系统指令系统167167 ADD dst,src;(dst)←(dst)+(src)1 1))ADDADD指令将目的操作数与源操作数相加,并将结果送给目指令将目的操作数与源操作数相加,并将结果送给目的操作数加法指令将影响状态标志位的操作数加法指令将影响状态标志位2 2)目的操作数可以是寄存器或存储器,源操作数可以是寄存)目的操作数可以是寄存器或存储器,源操作数可以是寄存器、存储器或立即数但是器、存储器或立即数但是源操作数和目的操作数不能同源操作数和目的操作数不能同时为存储器时为存储器另外,不能对段寄存器进行加法运算不能对段寄存器进行加法运算( (段寄存段寄存器也不能参加、减、乘、除运算器也不能参加、减、乘、除运算) )。

      加法指令的操作对象可加法指令的操作对象可以是以是8 8位数位数( (字节字节) ),也可以是,也可以是1616位数位数( (字字) ) 二进制数运算指令二进制数运算指令二进制数运算指令包括加法、减法、乘法、除法和符号扩二进制数运算指令包括加法、减法、乘法、除法和符号扩展指令等五种展指令等五种1) 加法指令加法指令包括不带进位加法指加法指令加法指令包括不带进位加法指令、带进位加法指令和加令、带进位加法指令和加1 1指令① ① 加法指令加法指令ADD (ADDition)ADD (ADDition)2.4 8086/80882.4 8086/8088指令系统指令系统168168 例如:例如:ADD CL,,10ADD DX,,SIADD AX,,MEMADD DATA[BX],,ALADD ALPHA[DI],,30H;;变量变量ALPHAALPHA的类型决定指令完成字节加还是字加的类型决定指令完成字节加还是字加相加的数据类型可以根据编程者的意图,规定为带符号相加的数据类型可以根据编程者的意图,规定为带符号数或无符号数数或无符号数对于无符号数,若相加结果超出了对于无符号数,若相加结果超出了8 8位或位或1616位无符号数所能表示的范围,则进位标志位位无符号数所能表示的范围,则进位标志位CFCF被置被置1 1;;对于带符号数,如果相加结果超出了对于带符号数,如果相加结果超出了8 8位或位或1616位补码所能位补码所能表示的范围表示的范围( (−128~+127128~+127或或−32 768~+32 767)32 768~+32 767),则溢出标,则溢出标志位志位OFOF被置被置1 1,结果溢出。

      结果溢出2.4 8086/80882.4 8086/8088指令系统指令系统169169 ② ② 带进位加法指令带进位加法指令ADC (ADdition with Carry)ADC (ADdition with Carry)ADC dst,src;(dst)←(dst)+(src)+(CF)1 1))ADCADC指令是将目的操作数与源操作数相加,再加上进位标指令是将目的操作数与源操作数相加,再加上进位标志志CFCF的内容,然后将结果送给目的操作数与的内容,然后将结果送给目的操作数与ADDADD指令指令一样,一样,ADCADC指令的运算结果也将修改状态标志位目的操指令的运算结果也将修改状态标志位目的操作数及源操作数的类型与作数及源操作数的类型与ADDADD指令相同,而且指令相同,而且ADCADC指令指令同样也可以进行字节操作或字操作同样也可以进行字节操作或字操作2 2))带进位加法指令主要用于多字节数据的加法运算带进位加法指令主要用于多字节数据的加法运算如果低字节相加时产生进位,则在下一次高字节相加时将这个进字节相加时产生进位,则在下一次高字节相加时将这个进位加进去位加进去 2.4 8086/80882.4 8086/8088指令系统指令系统170170 ………例:计算两个多字节十六进制数之和:例:计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=?3B74AC60F8H+20D59E36C1H=?被加数和加数均有被加数和加数均有5 5个字节,可以编一个循环程序实现以上运个字节,可以编一个循环程序实现以上运算。

      假设已将被加数和加数分别存入从算假设已将被加数和加数分别存入从DATA1DATA1和和DATA2DATA2开始开始的两个内存区,且均为低位字节在前,高位字节在后要求相的两个内存区,且均为低位字节在前,高位字节在后要求相加所得结果仍存回以加所得结果仍存回以DATA1DATA1为首址的内存区为首址的内存区F8H60HACH74H3BHC1H36H9EHD5H20H存储器DATA1DATA2被加数加数MOV CX,5 ;设置循环次数MOV SI,0 ;置位移量初值CLC ;清进位CFLOOP: MOV AL,DATA2[SI];取一个加数ADC DATA1[SI],ALINC SIDEC CXJNZ LOOPHLT;和一个被加数相加;位移量加1;循环次数减1;若没加完则继续循环;程序暂停171171 开始开始初始化初始化: 置循环次数置循环次数清清SI, 清进位标志清进位标志CF取一个取一个字节加数字节加数与一个被加数相加与一个被加数相加并送回内存区并送回内存区SI加加1循环次数减循环次数减1循环次数到循环次数到NY结束结束程序流程图程序流程图DEC CXJNZ LOOPHLTMOV CX,,5MOV SI,,0LOOP:: MOV AL,,DATA2[SI]ADD DATA1[SI],,ALINC SIDEC CXJNZ LOOPHLT试分析对比如下两个程序段完成的功能试分析对比如下两个程序段完成的功能MOV CX,5MOV SI,0CLCLOOP: MOV AL,DATA2[SI]ADC DATA1[SI],ALINC SI5 5字节连加法字节连加法5 5次字节加法次字节加法172172 ③ ③ 加加1 1指令指令INC (INCrement by 1)INC (INCrement by 1)INC dst;(dst)←(dst)+11 1))INCINC指令将目的操作数加指令将目的操作数加1 1,并将结果送回目的操作数。

      并将结果送回目的操作数指令将影响状态标志位,如指令将影响状态标志位,如SFSF、、ZFZF、、AFAF、、PFPF和和OFOF,但,但对进位标志对进位标志CFCF没有影响没有影响2 2))INCINC指令中目的操作数可以是寄存器或存储器,但不能是指令中目的操作数可以是寄存器或存储器,但不能是立即数和段寄存器其类型为字节操作或字操作均可立即数和段寄存器其类型为字节操作或字操作均可例如:例如:INC DLINC DLINC SIINC SIINC BYTE PTR[BX][SI] INC BYTE PTR[BX][SI] ;; BYTE PTRBYTE PTR指定操作数类型为字节指定操作数类型为字节 INC WORD PTR[DI] INC WORD PTR[DI] ;; WORD PTRWORD PTR指定操作数类型为字指定操作数类型为字 INCINC指令常常用于在循环程序中修改地址指令常常用于在循环程序中修改地址2.4 8086/80882.4 8086/8088指令系统指令系统173173 (2) (2) 减法指令减法指令减法指令包括不带借位减法指令、带借位减法指减法指令包括不带借位减法指令、带借位减法指令、减令、减1 1指令、求补指令和比较指令。

      指令、求补指令和比较指令①①减法指令减法指令SUB (SUBtraction)SUB (SUBtraction)SUB dst,src;(dst)←(dst) − (src)1 1))SUBSUB指令将目的操作数减源操作数,结果送回目的指令将目的操作数减源操作数,结果送回目的操作数指令对状态标志位有影响指令对状态标志位有影响2 2)与加法指令一样,目的操作数可以是寄存器或存储)与加法指令一样,目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,器,源操作数可以是立即数、寄存器或存储器,但不但不允许两个存储器操作数相减允许两个存储器操作数相减;既可以字节相减,也可;既可以字节相减,也可以字相减以字相减2.4 8086/80882.4 8086/8088指令系统指令系统174174 176例如:例如:SUB AL,37HSUB DX,BXSUB CX,VARE1SUB ARRAY[DI],AXSUB BETA[BX][DI],512;BETABETA应为字型变量,若为字节型则源操作数超出范围应为字型变量,若为字节型则源操作数超出范围减法数据的类型也可以根据要求约定为带符号数或无符号减法数据的类型也可以根据要求约定为带符号数或无符号数。

      数当无符号数的较小数减较大数时,因不够减而产生借当无符号数的较小数减较大数时,因不够减而产生借位,此时进位标志位,此时进位标志CFCF置置1 1当带符号数的较小数减较大数当带符号数的较小数减较大数时,将得到负的结果,则符号标志时,将得到负的结果,则符号标志SFSF置置1 1带符号数相减带符号数相减如果结果溢出,则如果结果溢出,则OFOF置置1 12.4 8086/80882.4 8086/8088指令系统指令系统175175 ② ② 带借位减法指令带借位减法指令SBB (SuBtraction with Borrow)SBB (SuBtraction with Borrow)SBB dst,src ;(dst)←(dst)-(src)-(CF)1 1))SBBSBB指令是将目的操作数减源操作数,然后再减进位标志指令是将目的操作数减源操作数,然后再减进位标志CFCF,并将结果送回目的操作数并将结果送回目的操作数2 2))SBBSBB指令对标志位的影响与指令对标志位的影响与SUBSUB指令相同目的操作数及指令相同目的操作数及源操作数的类型也与源操作数的类型也与SUBSUB指令相同指令相同8 8位或位或1616位数运算均可。

      位数运算均可例如:例如:SBBSBBSBBSBBSBBBX,1000CX,DXAL,DATA1[SI]DISP[BP],BLBYTE PTR [SI+6],97带借位减指令主要用于多字节的减法带借位减指令主要用于多字节的减法 2.4 8086/80882.4 8086/8088指令系统指令系统176176 ③ ③ 减减1 1指令指令DEC (DECrement by 1)DEC (DECrement by 1)DEC dst;;(dst)←←(dst) −11 1))DECDEC指令将目的操作数减指令将目的操作数减1 1,结果送回目的操作数指令对,结果送回目的操作数指令对状态标志位状态标志位SFSF、、ZFZF、、AFAF、、PFPF和和OFOF有影响,有影响,但不影响进位标但不影响进位标志志CFCF2 2)操作数与)操作数与INCINC一样,可以是寄存器或存储器一样,可以是寄存器或存储器( (立即数和段寄存立即数和段寄存器不可器不可) )其类型是字节操作或字操作均可其类型是字节操作或字操作均可3 3)例如:)例如:DECDECDECDECBLCXBYTE PTR[BX]WORD PTR[BP][DI]4 4)在循环程序中常常利用)在循环程序中常常利用DECDEC指令来修改循环次数。

      例如:指令来修改循环次数例如:MOV AX,,0FFFFHCYC::DEC AX;;JNZ CYCHLT以上程序段中以上程序段中DEC AXDEC AX指令重复执行指令重复执行65535(0FFFFH)65535(0FFFFH)次2.4 8086/80882.4 8086/8088指令系统指令系统177177 ④ ④ 求补指令求补指令NEG(NEGateNEG(NEGate) )NEG dst;(dst)←0 −￿(dst)1 1))NEGNEG指令的操作是用指令的操作是用““0”0”减去目的操作数,结果送回原来的目减去目的操作数,结果送回原来的目的操作数求补指令对状态标志位有影响的操作数求补指令对状态标志位有影响2 2)操作数可以是寄存器或存储器可以对)操作数可以是寄存器或存储器可以对8 8位数或位数或1616位数求补位数求补例如:例如:NEGNEGNEGNEGBLAXBYTE PTR[BP][SI]WORD PTR[DI+20]3 3)应用:)应用: 内存数据段存放了内存数据段存放了200200个带符号数个带符号数(8(8位补码表示位补码表示) ),首,首地址为地址为TAB1TAB1,要求将各数取绝对值后存入以,要求将各数取绝对值后存入以TAB2TAB2为首址的为首址的内存区。

      内存区由于由于200200个带符号数中可能既有正数,又有负数,因此先要判断个带符号数中可能既有正数,又有负数,因此先要判断正负如为正数,可以原封不动地传送到另一内存区;如为负正负如为正数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数的绝对值,然后再传送数,则需先求补即可得到负数的绝对值,然后再传送2.4 8086/80882.4 8086/8088指令系统指令系统178178 …………LEALEAMOVSI,,TAB1DI,,TAB2CX,,200;;(SI)←(SI)←源地址指针源地址指针;;(DI)←(DI)←目标地址指针目标地址指针;;(CX)←(CX)←循环次数循环次数CHECK::NEXT::AL,,[SI]AL,,ALNEXTAL[DI],,ALSIDICXCHECKMOVORJNSNEGMOVINCINCDECJNZHLTTAB1+0TAB1+199;取一个带符号数到;取一个带符号数到ALAL;;ALAL内容不变,但使之影响标志内容不变,但使之影响标志;若;若(SF)=0(SF)=0,则转,则转NEXTNEXT;否则求补;否则求补;传送到目标地址;传送到目标地址;源地址加;源地址加1 1;目标地址加;目标地址加1 1;循环次数减;循环次数减1 1;如不等于零,则转;如不等于零,则转CHECKCHECK;停止;停止TAB2+0TAB2+199179179 ⑤ ⑤ 比较指令比较指令CMP (CoMPare)CMP (CoMPare)CMP dst,src;(dst) − (src)1))CMP指令将目的操作数减源操作数,但结果不送回目的操作指令将目的操作数减源操作数,但结果不送回目的操作数。

      因此,数因此,执行比较指令以后,被比较的两个操作数内容均保执行比较指令以后,被比较的两个操作数内容均保持不变,而比较结果反映在状态标志位上,这是比较指令与减持不变,而比较结果反映在状态标志位上,这是比较指令与减法指令法指令SUB的区别所在的区别所在2))CMP指令的目的操作数可以是寄存器或存储器,源操作数可指令的目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器,但不能同时为存储器可以进以是立即数、寄存器或存储器,但不能同时为存储器可以进行字节比较,也可以是字比较行字节比较,也可以是字比较3)例如:)例如:CMPCMPCMPCMPAL,0AHCX,DIAX,AREA1[BX+5],SI;寄存器与立即数比较;寄存器与立即数比较;寄存器与寄存器比较;寄存器与寄存器比较;寄存器与存储器比较;寄存器与存储器比较;存储器与寄存器比较;存储器与寄存器比较4 4)比较指令的执行结果影响状态标志位,常常与条件转移指令结)比较指令的执行结果影响状态标志位,常常与条件转移指令结合起来使用,完成各种条件判断和相应的程序转移例如:合起来使用,完成各种条件判断和相应的程序转移例如:Ø若两个被比较的内容相等,则若两个被比较的内容相等,则(ZF)=1;;Ø假设被比较的两个无符号数中,前者小于后者假设被比较的两个无符号数中,前者小于后者( (即不够减即不够减) ),则,则(CF)=1;;2.4 8086/80882.4 8086/8088指令系统指令系统180180 应用:在数据段从应用:在数据段从MYDATAMYDATA开始的存储单元中分别存开始的存储单元中分别存放了两个放了两个8 8位无符号数,试比较它们的大小,并将位无符号数,试比较它们的大小,并将大者传送到大者传送到MAXMAX单元。

      单元LEA BX,,MYDATAMOV AL,,[BX]INC BXCMP AL,,[BX]JNC DONEMOV AL,,[BX];;MYDATA偏移地址送偏移地址送BX;第一个无符号数送;第一个无符号数送AL;;BX指向第二个无符号数指向第二个无符号数;两个数比较;两个数比较;如;如CF=0,则转,则转DONE;否则,第二个无符号数送;否则,第二个无符号数送ALDONE::MOV MAX,,ALHLT;较大的无符号数送;较大的无符号数送MAX单元单元;停止;停止2.4 8086/80882.4 8086/8088指令系统指令系统181181 (3) (3) 乘法指令乘法指令8086/80888086/8088指令系统中有两条乘法指令,可以实现无指令系统中有两条乘法指令,可以实现无符号数的乘法和带符号数的乘法,它们都只有一个源符号数的乘法和带符号数的乘法,它们都只有一个源操作数,而操作数,而目的操作数是隐含的目的操作数是隐含的这两条指令都可以这两条指令都可以实现字节或字的乘法运算进行乘法运算时,实现字节或字的乘法运算进行乘法运算时,如果两如果两个个8 8位数相乘,那么其乘积最多为位数相乘,那么其乘积最多为1616位;如果两个位;如果两个1616位数相乘,可得到位数相乘,可得到3232位的乘积。

      位的乘积16(16位位) )××乘数乘数乘积乘积被乘数被乘数(8(8位位) )××乘数乘数乘积乘积被乘数被乘数(8(8位位) )(16(16位位) )(16(16位位) )(32(32位位) )操作数操作数 操作数操作数AXAXALALDXDXAXAXAXAX2.4 8086/80882.4 8086/8088指令系统指令系统182182 ① ① 无符号数乘法指令无符号数乘法指令MUL (MULtiplication unsigned)MUL (MULtiplication unsigned)MUL src;;(AX)←←(AL) × × (src) ( (字节乘法字节乘法) );;(DX:AX)←(AX) × (src)( (字乘法字乘法) )MUL指令对状态标志位指令对状态标志位CF和和OF有影响,有影响,SF、、ZF、、AF和和PF不确定如果运算结果的高半部分不确定如果运算结果的高半部分( (在在AHAH或或DXDX中中) )为零,则为零,则状态标志位状态标志位(CF)=(OF)=0(CF)=(OF)=0,否则,否则(CF)=(OF)=1(CF)=(OF)=1因此,状态状态标志位标志位(CF)=(OF)=1(CF)=(OF)=1,表示,表示AHAH或或DXDX中包含着乘积的有效数中包含着乘积的有效数字。

      字例如:例如:MOV AL,,14HMOV CL,,05HMUL CL;;(AL)=14H;;(CL)=05H;;(AX)=0064H,, (CF)=(OF)=0状态标志位状态标志位(CF)=(OF)=0是因为结果的高半部分是因为结果的高半部分(AH)=0 2.4 8086/80882.4 8086/8088指令系统指令系统183183 ② ② 带符号数的乘法带符号数的乘法IMUL (Integer MULtiplicationIMUL (Integer MULtiplication)IMUL src;;(AX)←(AL) ×(src) (字节乘法字节乘法) ;;(DX:AX)←(AX) ×(src) ( (字乘法字乘法) )1 1))IMULIMUL指令进行带符号数乘法,指令将两个操作数均按指令进行带符号数乘法,指令将两个操作数均按带符号数处理这是它与带符号数处理这是它与MUL指令的区别所在指令的区别所在2 2))8 8位和位和1616位带符号数的取值范围分别是位带符号数的取值范围分别是−128128~~+127+127和和−3276832768~~+32767+32767。

      如果乘积的高半部分仅仅是低半部分如果乘积的高半部分仅仅是低半部分符号位的扩展,则状态标志位符号位的扩展,则状态标志位( (CF)=(OF)=0;;否则,高半否则,高半部分包含乘积的有效数字而不只是符号的扩展,则部分包含乘积的有效数字而不只是符号的扩展,则(CF)=(OF)=13 3)所谓乘积的高半部分仅仅是低半部分符号位的扩展,)所谓乘积的高半部分仅仅是低半部分符号位的扩展,是指当乘积为正值时,其符号位为零,则是指当乘积为正值时,其符号位为零,则AHAH或或DXDX为8位全为8位全零或零或1616位全零;当乘积是负值时,其符号位为位全零;当乘积是负值时,其符号位为1 1,则,则AHAH或或DXDX为为8 8位全位全1 1或或1616位全位全1 12.4 8086/80882.4 8086/8088指令系统指令系统184184 (4) (4) 除法指令除法指令8086/8088 CPU8086/8088 CPU执行除法时规定:执行除法时规定:除数只能是被除数除数只能是被除数的一半字长的一半字长当被除数为当被除数为1616位时,除数应为位时,除数应为8 8位;被位;被除数为除数为3232位时,除数应为位时,除数应为1616位。

      并规定:位并规定:① ① 当被除数为当被除数为1616位,应存放于位,应存放于AXAX中除数应为中除数应为8 8位,可存放位,可存放在寄存器在寄存器/ /存储器中而得到的8位商放在存储器中而得到的8位商放在ALAL中,中,8 8位余数放位余数放在在AHAH中② ② 当被除数为当被除数为3232位,应存放于位,应存放于DX:AXDX:AX中除数应为中除数应为1616位,位,可存放在寄存器可存放在寄存器/ /存储器中而得到的存储器中而得到的1616位商放在位商放在AXAX中,中,1616位余数放在位余数放在DXDX中AX操作数操作数商商AL余数余数AH除数除数(8(8位位) )被除数被除数(16(16位位) )AX操作数操作数DX商商AX余数余数DX除数除数(16位位)被除数被除数(32位位)185185 8086/80888086/8088指令系统中有无符号数除法指令和带符号数除法指令系统中有无符号数除法指令和带符号数除法指令两条除法指令指令两条除法指令① ① 无符号数除法指令无符号数除法指令DIV (DIVision unsigned)DIV (DIVision unsigned)DIV src;(AL)←(AX)/(src)的商的商( (字节除法)字节除法)(AH)←(AX)/(src)的余数的余数或或(AX)←(DX:AX)/(src)的商的商 ( (字除法字除法) )(DX)←(DX:AX)/(src)的余数的余数在在DIV指令中,一个操作数指令中,一个操作数( (被除数被除数) )隐含在累加器隐含在累加器AX(AX(字节字节 除除) )或或DX:AX( (字除法字除法) )中,另一个操作数中,另一个操作数src( (除数除数) )必须是必须是寄寄存器或存储器操作数。

      两个操作数被作为无符号数对待存器或存储器操作数两个操作数被作为无符号数对待执行执行DIV指令时,如果除数为指令时,如果除数为0 0,或字节除法时商大于,或字节除法时商大于FFH,或字除法时商大于,或字除法时商大于FFFFH,则,则CPU立即自动产生一立即自动产生一 个类型号为个类型号为0 0的内部中断的内部中断DIV指令使状态标志位指令使状态标志位SF、、ZF、、AF、、PF、、CF和和OF的值不的值不 确定2.4 8086/80882.4 8086/8088指令系统指令系统186186 ② ② 带符号数除法指令带符号数除法指令IDIV (Integer DIVision)IDIV (Integer DIVision)IDIV src ; (AL)←(AX)/(src)的商的商( (字节除法字节除法) ) (AH)←←(AX)/(src)的余数的余数或或 (AX)←(DX:AX)/(src)的商的商( (字除法字除法) ) (DX)←(DX:AX)/(src)的余数的余数 执行执行IDIV指令时,如除数为指令时,如除数为0 0,或字节除法时,或字节除法时AL寄存器中寄存器中的商超出的商超出−128~+127128~+127的范围,或字除法时的范围,或字除法时AX寄存器中的寄存器中的商超出商超出−32 768~+32 76732 768~+32 767的范围,则自动产生一个类型为的范围,则自动产生一个类型为0 0的中断。

      的中断IDIV指令中操作数的类型及对状态标志位的影响与指令中操作数的类型及对状态标志位的影响与DIV指指令相同IDIV指令对非整数商舍去尾数,而余数的符号总是与被除指令对非整数商舍去尾数,而余数的符号总是与被除数的符号相同数的符号相同2.4 8086/80882.4 8086/8088指令系统指令系统187187 (5) (5) 符号扩展指令符号扩展指令1)在各种二进制算术运算指令中,两个操作数的字长应在各种二进制算术运算指令中,两个操作数的字长应该符合规定的关系例如在加法、减法和乘法运算该符合规定的关系例如在加法、减法和乘法运算中,两个操作数的字长必须相等,而除法指令中被除中,两个操作数的字长必须相等,而除法指令中被除数必须是除数的双倍字长因此有时需要将一个数必须是除数的双倍字长因此有时需要将一个8 8位数位数扩展成为扩展成为1616位,或者将一个位,或者将一个1616位数扩展成为位数扩展成为3232位2 2)对于无符号数,扩展字长比较简单,只需使扩展后)对于无符号数,扩展字长比较简单,只需使扩展后1616位的高位的高8 8位或扩展后位或扩展后3232位的高位的高1616位为零即可位为零即可。

      3 3)但对于带符号数,扩展字长时正数与负数的处理方法)但对于带符号数,扩展字长时正数与负数的处理方法不同正数的符号位为零,而负数的符号位为1,扩不同正数的符号位为零,而负数的符号位为1,扩展字长时,应分别在高位添上相应的符号位,才能保展字长时,应分别在高位添上相应的符号位,才能保证原数据的大小和符号不变证原数据的大小和符号不变符号扩展指令就是用来符号扩展指令就是用来完成对带符号数的字长扩展完成对带符号数的字长扩展以下两条指令将以下两条指令将AL中的一个8位无符号数扩展成为中的一个8位无符号数扩展成为1616位存放在位存放在AX中MOV AL,,0FBH;;(AL) =11111011BXOR  AH,,AH;;(AH)=00000000B188188 ① ① 字节扩展指令字节扩展指令CBW (Convert Byte to Word)CBW (Convert Byte to Word)CBW;如果如果(AL)<80H,则则(AH)←00H,否则否则(AH)←0FFH1))CBW指令将一个字节指令将一个字节( (8位8位) )按其符号扩展成为字按其符号扩展成为字(16(16位位) )。

      它是一个隐含操作数的指令,它是一个隐含操作数的指令,隐含的操作数为寄存器隐含的操作数为寄存器AL和和AHCBW指令对状态标志位没有影响指令对状态标志位没有影响2 2)观察下面两组指令,由于初始时)观察下面两组指令,由于初始时AL寄存器中内容的符号寄存器中内容的符号位不同,因而执行位不同,因而执行CBW指令后指令后AH中的结果也不同中的结果也不同MOV AL,,4FHCBWMOV AL,,0F4HCBW;;(AL) =01001111B;;(AH)=00000000B;;(AL) =11110100B;;(AH)=11111111B2.4 8086/80882.4 8086/8088指令系统指令系统189189 ② ② 字扩展指令字扩展指令CWD (Convert Word to Double word)CWD (Convert Word to Double word)CWD ;;如果如果(AX)<8000H,则,则(DX)←←0000H,,否则否则(DX)←←FFFFH1))CWD指令将一个字指令将一个字(16(16位位) )按其符号扩展成为双字按其符号扩展成为双字(32(32位位) )。

      它也是一个隐含操作数指令,隐含的操作数为寄存器它也是一个隐含操作数指令,隐含的操作数为寄存器AX和和DXCWD指令与指令与CBW一样,对状态标志位没有影响一样,对状态标志位没有影响 2))CBW和和CWD指令在带符号数的乘法指令在带符号数的乘法(IMUL)和除法和除法(IDIV) 运算中十分有用,可在在字节或字的运算之前,将运算中十分有用,可在在字节或字的运算之前,将ALAL或或 AX AX中数据的符号位进行扩展例如:中数据的符号位进行扩展例如:MOV  AL,,MUL_NCBWIMUL BX;;(AL)←8←8位被乘数位被乘数( (带符号数带符号数) );扩展成为;扩展成为1616位带符号数至位带符号数至AXAX中中;两个;两个1616位带符号数相乘,结果在位带符号数相乘,结果在DX:AX中中 2.4 8086/80882.4 8086/8088指令系统指令系统190190 位操作指令位操作指令位操作指令是对位操作指令是对8 8位或位或1616位的寄存器或存储单元中的内容按位进位的寄存器或存储单元中的内容按位进行操作。

      这一类指令包括行操作这一类指令包括逻辑运算指令、移位指令和循环移位指逻辑运算指令、移位指令和循环移位指令等三组令等三组逻辑运算指令逻辑运算指令8086/80888086/8088指令系统的逻辑运算指令有指令系统的逻辑运算指令有AND(逻辑逻辑““与与””) )、、TEST( (测试测试) )、、OR( (逻辑逻辑““或或””) )、、XOR( (逻辑逻辑““异或异或””) )和和NOT( (逻辑逻辑““非非””) )五条指令,这些指令对操作数中的各个位五条指令,这些指令对操作数中的各个位分别进行布尔运算分别进行布尔运算2.4 8086/80882.4 8086/8088指令系统指令系统191191 XYX AND YX OR YX XOR YNOT X000001010111100110111100逻辑运算返回的值逻辑运算返回的值五条逻辑运算指令中,惟有五条逻辑运算指令中,惟有NOT指令对状态标志位不产生指令对状态标志位不产生影响影响,其余四条指令,其余四条指令( (即即AND、、TEST、、OR和和XOR) )对状态对状态标志位均有影响标志位均有影响这些指令将根据各自逻辑运算的结果影这些指令将根据各自逻辑运算的结果影响响SF、、ZF和和PF状态标志位,同时将状态标志位,同时将CF和和OF置置““0””,但使,但使AFAF的值不确定。

      的值不确定2.4 8086/80882.4 8086/8088指令系统指令系统192192 (1) (1) 逻辑逻辑““与与””指令指令AND (logical AND)AND (logical AND)AND dst,src;(dst)←(dst)∧(src)1))AND指令将目的操作数和源操作数按位进行逻辑指令将目的操作数和源操作数按位进行逻辑““与与””运运算,并将结果送回目的操作数算,并将结果送回目的操作数2 2)目的操作数可以是寄存器或存储器,源操作数可以是立即)目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储器但是指令的两个操作数不能同时是数、寄存器或存储器但是指令的两个操作数不能同时是存储器,即不能将两个存储器的内容进行逻辑存储器,即不能将两个存储器的内容进行逻辑““与与””操作AND指令操作对象的类型可以是字节,也可以是字指令操作对象的类型可以是字节,也可以是字3 3)例如:)例如:AND AL,,00001111H ;;寄存器寄存器" "与与" "立即数立即数AND CX,DI;寄存器寄存器" "与与" "寄存器寄存器AND SI,MEM_NAME ;寄存器寄存器" "与与" "存储器存储器ANDANDALPHA[DI],AX[BX][SI],0FFFEH;;存储器存储器" "与与" "寄存器寄存器;;存储器存储器" "与与" "立即数立即数2.4 8086/80882.4 8086/8088指令系统指令系统193193 大大 写写 字字 母母小小 写写 字字 母母'A'=41H=0100 0001B'B'=42H=0100 0010B…'Z'=5AH=0101 1010B'a'=61H=0110 0001B'b'=62H=0110 0010B…'z'=7AH=0111 1010B应用:应用:AND指令可以用于屏蔽某些不关心的位,而保留另一指令可以用于屏蔽某些不关心的位,而保留另一些感兴趣的位。

      些感兴趣的位只需将屏蔽的位和只需将屏蔽的位和““0””进行逻辑进行逻辑““与与””,而将要求,而将要求保留的位和保留的位和““1””进行逻辑进行逻辑““与与””即可即可例如:应用例如:应用AND AL,,0FH指令可将数字指令可将数字0~~9的的ASCII码转换成相应码转换成相应的非压缩型的非压缩型BCD码:码:MOV AL,'6'AND AL,0FH;(AL)=00110110B;(AL)=00000110B应用:利用应用:利用AND AL,,11011111B指令可以将指令可以将AL中的英文字中的英文字母母( (用用ASCII码表示码表示) )转换成为大写字母转换成为大写字母如果字母原来已经是如果字母原来已经是大写,则以上大写,则以上AND指令不起作用,因为大写字母指令不起作用,因为大写字母ASCII码的码的第第5位总是位总是0;如果原来是小写字母,则将其第;如果原来是小写字母,则将其第5位置位置““0””,转,转换成为相应的大写字母换成为相应的大写字母2.4 8086/80882.4 8086/8088指令系统指令系统194194 以下几条指令判断从键盘输入的字符是否为以下几条指令判断从键盘输入的字符是否为'Y',但,但对键入的字符大写或小写不加区别,同样对待。

      对键入的字符大写或小写不加区别,同样对待MOV AH,1INT 21HAND AL,11011111BCMP AL,'Y'JE YES…;;接收由键盘输入的一个字符接收由键盘输入的一个字符;;字符的字符的ASCII码存码存AL;;屏蔽第屏蔽第5位,转换为大写字母位,转换为大写字母;;字符是否为字符是否为' ''Y''?''?;;如是,转到如是,转到YES;;否则,否则,…YES:…2.4 8086/80882.4 8086/8088指令系统指令系统195195 (2) (2) 测试指令测试指令TEST (TEST or non-destructiveTEST (TEST or non-destructive logical AND) logical AND)TEST dst,src;(dst)∧(src)TEST指令的操作实质上与指令的操作实质上与AND指令相同,即把目的操作指令相同,即把目的操作数和源操作数进行逻辑数和源操作数进行逻辑““与与””运算运算二者的区别在于二者的区别在于TESTTEST指令不把逻辑运算的结果送回目的操作数,只将结果反映指令不把逻辑运算的结果送回目的操作数,只将结果反映在状态标志位上。

      在状态标志位上例如,例如,““与与””的结果最高位是的结果最高位是““0””还是还是““1””,结果是否为全,结果是否为全““0””,结果中,结果中““1””的个数是奇数还是偶的个数是奇数还是偶数等,分别由数等,分别由SF、、ZF和和PF状态标志位体现和状态标志位体现和AND指令指令一样,一样,TEST指令总是将指令总是将CF和和OF清零,但使清零,但使AF的值不确定的值不确定例如:例如:TESTTESTBH,7SI,BP;;寄存器寄存器''''与与''''立即数立即数( (结果不回送,下同结果不回送,下同) );;寄存器寄存器''''与与''''寄存器寄存器TEST [SI],CH ;存储器存储器''''与与''''寄存器寄存器TEST [BX][DI],BYTE PTR 6AH;;存储器存储器''''与与''''立即数立即数2.4 8086/80882.4 8086/8088指令系统指令系统196196 TEST指令常常用于位测试,它与条件转移指令一起,共同指令常常用于位测试,它与条件转移指令一起,共同完成对特定位状态的判断,并实现相应的程序转移完成对特定位状态的判断,并实现相应的程序转移。

      这样这样的作用与比较指令的作用与比较指令CMP有些类似,有些类似,不过不过TEST指令只比较指令只比较某一个指定的位,而某一个指定的位,而CMP指令比较整个操作数指令比较整个操作数( (字节或字节或字字) )例如以下几条指令判断一个端口地址为例如以下几条指令判断一个端口地址为PORT的外设的外设端口输入的数据,若输入数据的第端口输入的数据,若输入数据的第1、、3、、5位中的任一位不位中的任一位不等于零,则转移到等于零,则转移到NEXTIN AL,PORTTEST AL,00101010BJNZ NEXT;;从端口从端口PORT输入数据输入数据;;测试第测试第1、、3、、5位位;;任一位不为任一位不为0,则转移,则转移NEXT: … 2.4 8086/80882.4 8086/8088指令系统指令系统197197 (3) (3) 逻辑逻辑““或或””指令指令OR (logical inclusive OR)OR (logical inclusive OR)OR dst,src;(dst)←(dst)∨(src)1))OR指令将目的操作数和源操作数按位进行逻辑指令将目的操作数和源操作数按位进行逻辑““或或””运运算,并将结果送回目的操作数。

      算,并将结果送回目的操作数2))OR指令操作数的类型与指令操作数的类型与AND相同,即目的操作数可以是相同,即目的操作数可以是寄存器或存储器,源操作数可以是立即数、寄存器或存储寄存器或存储器,源操作数可以是立即数、寄存器或存储器但两个操作数不能同时都是存储器但两个操作数不能同时都是存储器3 3)例如:)例如:ORORORORORBL,0F6HAX,BXCL,BETA[BX][DI]GAMMA[SI],DXMEM_BYTE,80H;寄存器;寄存器''''或或''''立即数立即数;寄存器;寄存器''''或或''''寄存器寄存器;寄存器;寄存器''''或或''''存储器存储器;存储器;存储器''''或或''''寄存器寄存器;存储器;存储器''''或或''''立即数立即数2.4 8086/80882.4 8086/8088指令系统指令系统198198 1))OR指令的一个常见的用途是将寄存器或存储器中某些特定的指令的一个常见的用途是将寄存器或存储器中某些特定的位设置成位设置成““1”1”,而不管这些位原来的状态如何,同时使其余位,而不管这些位原来的状态如何,同时使其余位保持原来的状态不变保持原来的状态不变。

      为此,应将需置为此,应将需置““1”1”的位和的位和““1”1”进行逻进行逻辑辑““或或””,而将要求保持不变的位和,而将要求保持不变的位和““0”0”进行逻辑进行逻辑““或或””例如,以下指令可将以下指令可将AHAH寄存器及寄存器及ALAL寄存器的最高位同时置寄存器的最高位同时置““1”1”,而,而AXAX中的其余位保持不变:中的其余位保持不变:OR AXOR AX,,8080H 8080H ;;(AX)∨(10000000 10000000B)(AX)∨(10000000 10000000B)2 2))ANDAND指令和指令和OROR指令有一个共同的特性:指令有一个共同的特性:如果将一个寄存器如果将一个寄存器的内容和该寄存器本身进行逻辑的内容和该寄存器本身进行逻辑““与与””操作或者逻辑操作或者逻辑““或或””操操作,则寄存器原来的内容不会改变,但寄存器中的内容将影作,则寄存器原来的内容不会改变,但寄存器中的内容将影响响SFSF、、ZFZF和和PFPF状态标志位,且将状态标志位,且将OFOF和和CFCF清零 利用这个利用这个特性,可以在数据传送指令之后,使该数据影响标志位,然特性,可以在数据传送指令之后,使该数据影响标志位,然后再判断数据的正负。

      例如,以下指令判断数据是否为零:后再判断数据的正负例如,以下指令判断数据是否为零:MOV AXMOV AX,,DATA DATA ;;(AX)←DATA(AX)←DATAOR AXOR AX,,AX AX ;影响标志;影响标志( (也可用也可用ANDAND指令指令) );如为零,转移到;如为零,转移到ZERO;否则,;否则,……JZ ZERO…ZERO: …如果不使用如果不使用OR AXOR AX,,AX(AX(或或ANDANDAXAX,,AX)AX)指指令,则不能紧令,则不能紧跟着进行条件跟着进行条件判断和程序转判断和程序转移,因为移,因为MOVMOV指令不指令不影响标志位影响标志位当然采用当然采用CMP AXCMP AX,,0 0指令代替上述指令代替上述ANDAND或或OROR指令也指令也可以得到可以得到同样的效果,同样的效果,但比较指令字但比较指令字节较多,执行节较多,执行速度较慢速度较慢2.4 8086/80882.4 8086/8088指令系统指令系统199199 215(4) (4) 逻辑逻辑““异或异或””指令指令XOR (logical eXclusive XOR (logical eXclusive OR)OR)XOR dst,src;(dst)←(dst)⊕(src)XOR指令将目的操作数和源操作数按位进行逻辑指令将目的操作数和源操作数按位进行逻辑““异或异或””运运算,并将结果送回目的操作数。

      算,并将结果送回目的操作数XOR指令操作数的类型和指令操作数的类型和AND、、OR指令均相同指令均相同例如:例如:XORXORXORXORDI,23F6HSI,DXCL,BUFFERMEM[BX],AX;寄存器;寄存器''''异或异或''''立即数立即数;寄存器;寄存器''''异或异或''''寄存器寄存器;寄存器;寄存器''''异或异或''''存储器存储器;存储器;存储器''''异或异或''''寄存器寄存器XOR TABLE[BP][SI],3DH;存储器;存储器''''异或异或''''立即数立即数2.4 8086/80882.4 8086/8088指令系统指令系统200200 2161))XOR指令的一个用途是将寄存器或存储器中某些特定的位指令的一个用途是将寄存器或存储器中某些特定的位““求反求反””,而使其余位保持不变而使其余位保持不变为此,可将欲为此,可将欲““求反求反””的位的位和和““1”1”进行进行““异或异或””,而将要求保持不变的位和,而将要求保持不变的位和““0”0”进行进行““异异或或””例如,若要使例如,若要使ALAL寄存器中的第寄存器中的第1 1、、3 3、、5 5、、7 7位求反,位求反,第第0 0、、2 2、、4 4、、6 6位保持不变,则只需将位保持不变,则只需将AL和和10101010B(10101010B(即即0AAH)“异或异或””即可。

      即可MOV AL,0FHXOR AL,0AAH;(AL)=00001111B;(AL)=10100101B(0A5H)2))XOR指令的另一个用途是将寄存器的内容清零指令的另一个用途是将寄存器的内容清零例如:例如:XOR AX,AXXOR CX,CX;;AX清零清零;;CX清零清零2.4 8086/80882.4 8086/8088指令系统指令系统201201 217应用:从偏移地址应用:从偏移地址TABLE开始的内存区中,存放着开始的内存区中,存放着100个个字节型数据,要求将这些数进行累加,并将累加和的低位字节型数据,要求将这些数进行累加,并将累加和的低位存存SUM单元,高位存单元,高位存SUM+1单元程序如下:单元程序如下:LEA BX,TABLEMOV CL,100XOR AX,AXLOOPER:ADD AL,[BX]JNC GOONINC AH;;(BX)←←数据表地址指针数据表地址指针;;(CL)←←数据块长度数据块长度;清;清AL、、AH,并清进位,并清进位CF;加一个数到;加一个数到AL;如;如(CF)=0,转移到,转移到GOON;否则,;否则,AH加加1GOON:INC BX;地址指针加;地址指针加1DEC CLJNZ LOOPERMOV SUM,AXHLT;计数值减;计数值减1;如;如(CL)≠0转移到转移到LOOPER;否则,;否则,(SUM)←(AL),,;;( (SUM+1)←(AH);停止;停止2.4 8086/80882.4 8086/8088指令系统指令系统202202 218(5) (5) 逻辑逻辑““非非””运算运算NOT (logical NOT)NOT (logical NOT)NOT dst;(dst)←0FFH−(dst) ( (字节求反字节求反) );;(dst)←0FFFFH− (dst) ( (字求反字求反) ) NOT指令的操作数可以是指令的操作数可以是8 8位或位或1616位的寄存器或存储器,位的寄存器或存储器,但不能对一个立即数执行逻辑但不能对一个立即数执行逻辑““非非””操作。

      操作例如:例如:NOT AHNOT CXNOT BYTE PTR[BP]NOT WORD PTR COUNT;;8位寄存器操作数求反位寄存器操作数求反;;16位寄存器操作数求反位寄存器操作数求反;;8位存储器操作数求反位存储器操作数求反;;16位存储器操作数求反位存储器操作数求反 2.4 8086/80882.4 8086/8088指令系统指令系统203203 移位指令移位指令8086/8088指令系统的移位指令包括指令系统的移位指令包括逻辑左移逻辑左移SHL、算术、算术左移左移SAL、逻辑右移、逻辑右移SHR、算术右移、算术右移SAR等指令等指令,其中,其中SHL和和SAL指令的操作完全相同移位指令的操作对象可指令的操作完全相同移位指令的操作对象可以是一个以是一个8位或位或16位的寄存器或存储器,移位操作可以是位的寄存器或存储器,移位操作可以是向左或向右一次移一位,也可以一次移多位向左或向右一次移一位,也可以一次移多位当要求一次当要求一次移多位时,指令规定移动位数必须放在移多位时,指令规定移动位数必须放在CL寄存器中寄存器中,即,即指令中规定的移位次数不允许是指令中规定的移位次数不允许是1以外的常数或以外的常数或CL以外的以外的寄存器。

      移位指令都影响状态标志位,但影响的方式各条寄存器移位指令都影响状态标志位,但影响的方式各条指令不尽相同指令不尽相同2.4 8086/80882.4 8086/8088指令系统指令系统204204 (1) (1) 逻辑左移逻辑左移/ /算术左移指令算术左移指令SHL/SAL SHL/SAL (SHhift logical Left/Shift Arithmetic Left) )SHL dst,,1/CL或或 SAL dst,,1/CLCFCFdstdst1 1)指令的操作是将目的操作数顺序向左移)指令的操作是将目的操作数顺序向左移1 1位或移位或移CLCL寄存器指寄存器指定的位数左移定的位数左移1 1位时,操作数的最高位移入进位标志位时,操作数的最高位移入进位标志CFCF,,最低位补最低位补0 0 2 2))SHL/SALSHL/SAL指令将影响指令将影响CFCF和和OFOF两个状态标志位两个状态标志位,如果移位次,如果移位次数等于数等于1 1,且移位以后目的操作数新的最高位与,且移位以后目的操作数新的最高位与CFCF不相等,不相等,则溢出标志则溢出标志OF=1OF=1,否则,否则OF=0OF=0。

      因此因此OFOF的值表示移位操作是的值表示移位操作是否改变了符号位否改变了符号位如果移位次数不等于1,则如果移位次数不等于1,则OFOF的值不确的值不确定指令对其他状态标志位没有影响指令对其他状态标志位没有影响 02.4 8086/80882.4 8086/8088指令系统指令系统205205 例如:例如:SHLSALSALSHLAH,1SI,CLWORD PTR[BX+5],1BYTE PTR DATA,CL;寄存器左移;寄存器左移1 1位位;寄存器左移;寄存器左移(CL)(CL)位位;存储器左移;存储器左移1 1位位;存储器左移;存储器左移(CL)(CL)位位应用:将一个应用:将一个16位无符号数乘以位无符号数乘以10该数原来存放在以该数原来存放在以FACTOR为首地址的两个连续的存储单元中为首地址的两个连续的存储单元中( (低位在前,高位低位在前,高位在后在后) )因为FACTOR×10=(FACTOR×8)+(FACTOR×2),,故可用左移指令实现以上乘法运算编程如下:故可用左移指令实现以上乘法运算编程如下:MOV AX,FACTORSHL AX,1MOV BX,AXSHL AX,1SHL AX,1ADD AX,BX;;(AX)←被乘数被乘数;;(AX)=FACTOR×2;暂存;暂存BX;;(AX)=FACTOR×4;;(AX)=FACTOR×8;;(AX)=FACTOR×10HLTHLT以上程序的执行时间大约需以上程序的执行时间大约需26个时钟。

      如用乘法指令编程,执个时钟如用乘法指令编程,执行时间将超过行时间将超过130个时钟 2.4 8086/80882.4 8086/8088指令系统指令系统206206 例如:例如:SHR BL,1SHR AX,CLSHR BYTE PTR[DI+BP],1SHR WORD PTR BLOCK,CL(CL)位位(2) (2) 逻辑右移指令逻辑右移指令SHR (SHift logical Right)SHR (SHift logical Right) SHR dst,,1/CL1))SHR指令的操作是将目的操作数顺序向右移指令的操作是将目的操作数顺序向右移1 1位或移位或移CL寄存器指定的位数逻辑右移寄存器指定的位数逻辑右移1 1位时,操作数的最低位移到进位标位时,操作数的最低位移到进位标志志CF,最高位补,最高位补02 2))SHR指令也将影响指令也将影响CF和和OF状态标志位如果移位次数状态标志位如果移位次数等于等于1 1,且,且移位以后新的最高位与次高位不相等,则移位以后新的最高位与次高位不相等,则OF=1,否则,否则OF=0实质上此时。

      实质上此时OFOF的值仍然表示符号位在移位前后是否改变的值仍然表示符号位在移位前后是否改变如果移位次数不等于1,则如果移位次数不等于1,则OF的值不定的值不定寄存器逻辑右移;寄存器逻辑右移1 1位位;寄存器逻辑右移;寄存器逻辑右移(CL)(CL)位位;存储器逻辑右移;存储器逻辑右移1 1位位;存储器逻辑右移;存储器逻辑右移2.4 8086/80882.4 8086/8088指令系统指令系统CFCFdstdst0207207 应用:将一个应用:将一个16位无符号数除以位无符号数除以512该数原来存放在以该数原来存放在以DIVIDAND为首地址的两个连续的存储单元中因为为首地址的两个连续的存储单元中因为DIVIDAND÷512=(DIVIDAND÷2)÷256,故可用逻辑右,故可用逻辑右移指令完成上述除法运算移指令完成上述除法运算编程如下:编程如下:MOV AX,,DIVIDAND ;;(AX)←←被除数被除数SHR AX,,1XCHG AL,,AH;;(AX)=DIVIDAND÷2(AX)=DIVIDAND÷2;;(AL)←→(AH)(AL)←→(AH),,;相当于循环右移;相当于循环右移8 8位位CBW;清;清AXAX的高的高8 8位,位,也可用:也可用:MOV AH,0或或XOR AH,AH但用但用CBW最合理最合理;;(AX)=DIVIDAND÷÷512HLT当然,也可以将立即数当然,也可以将立即数9 9传送到传送到CLCL寄存器,然后用指令寄存器,然后用指令SHRSHRAXAX,,CLCL完成除以完成除以512512的运算。

      但是相比之下,上面的程序的运算但是相比之下,上面的程序执行速度更快执行速度更快2.4 8086/80882.4 8086/8088指令系统指令系统208208 (3)(3) 算术右移指令算术右移指令SAR (Shift Arithmetic Right)SAR (Shift Arithmetic Right)SAR dst,1/CLSARSAR指令的操作数与逻辑右移指令指令的操作数与逻辑右移指令SHRSHR有点类似,即将目的有点类似,即将目的操作数向右移1位或移操作数向右移1位或移CLCL寄存器指定的位数,操作数的最低寄存器指定的位数,操作数的最低位移到进位标志位移到进位标志CFCF它与SHRSHR指令的主要区别是,指令的主要区别是,算术右移算术右移时,最高位保持不变时,最高位保持不变算术右移指令对状态标志位算术右移指令对状态标志位CFCF、、OFOF、、PFPF、、SFSF和和ZFZF有影响,有影响,但使但使AFAF的值不确定的值不确定例如:例如:SAR AL,1SAR DI,CL;寄存器算术右移;寄存器算术右移1 1位位;寄存器算术右移;寄存器算术右移(CL)位SAR WORD PTR TABLE[SI],1 ;存储器算术右移;存储器算术右移1 1位位SAR BYTE PTR STATUS,CLCFdst;存储器算术右移;存储器算术右移(CL)(CL)209209 循环移位指令循环移位指令1))8086/8088指令系统有指令系统有四条循环移位指令四条循环移位指令,它们是不带进位标志,它们是不带进位标志CF的左循环移位指令的左循环移位指令ROL和右循环移位指令和右循环移位指令ROR(也称小循环也称小循环),以及带,以及带进位标志进位标志CF的左循环移位指令的左循环移位指令RCL和右循环移位指令和右循环移位指令RCR(也称大循也称大循环环)。

      2)循环移位指令的操作数类型与移位指令相同,可以是)循环移位指令的操作数类型与移位指令相同,可以是8位或位或16位的位的寄存器或存储器指令中指定的左移或右移的位数可以是寄存器或存储器指令中指定的左移或右移的位数可以是1或由或由CL寄寄存器指定,但不能是存器指定,但不能是1以外的常数或以外的常数或CL以外的其他寄存器以外的其他寄存器3)所有循环移位指令都只影响进位标志)所有循环移位指令都只影响进位标志CF和溢出标志和溢出标志OF,但,但OF标标志的含义对于左循环移位指令和右循环移位指令有所不同志的含义对于左循环移位指令和右循环移位指令有所不同2.4 8086/80882.4 8086/8088指令系统指令系统210210 (1) (1) 循环左移指令循环左移指令ROL (ROtate Left)ROL (ROtate Left)ROL dst,1/CL1))ROL指令将目的操作数向左循环移动指令将目的操作数向左循环移动1位或移位或移CL寄存器指定寄存器指定的位数最高位移到进位标志最高位移到进位标志CF,同时最高位移到最低位形,同时最高位移到最低位形成循环,成循环,进位标志进位标志CF不在循环回路之内。

      不在循环回路之内2))ROL指令将影响指令将影响CF和和OF两个状态标志位如果循环移位次两个状态标志位如果循环移位次数等于1且数等于1且移位以后目的操作数新的最高位与移位以后目的操作数新的最高位与CF不相等,则不相等,则(OF)=1,否则,否则(OF)= 0因此因此OF的值表示循环移位前后符号的值表示循环移位前后符号位是否有所变化如果移位次数不等于1则位是否有所变化如果移位次数不等于1则OF的值不确定的值不确定3)例如:)例如:ROLROLROLROLBH,1DX,CLWORD PTR [DI],1BYTE PTR ALPHA,CL;寄存器循环左移;寄存器循环左移1位位;寄存器循环左移;寄存器循环左移(CL)位位;存储器循环左移;存储器循环左移1位位;存储器循环左移;存储器循环左移(CL)位位 2.4 8086/80882.4 8086/8088指令系统指令系统211211 (2) (2) 循环右移指令循环右移指令ROR (ROtate Right)ROR (ROtate Right)ROR dst,1/CL1))ROR指令将目的操作数向右循环移动指令将目的操作数向右循环移动1位或移位或移CL寄存器指定寄存器指定的位数。

      最低位移到进位标志的位数最低位移到进位标志CF,同时最低位移到最高位同时最低位移到最高位2))ROR指令也将影响状态标志位指令也将影响状态标志位CF和和OF若循环移位次数等若循环移位次数等于1且移位后于1且移位后新的最高位和次高位不等,则新的最高位和次高位不等,则(OF)=1,否则,否则(OF)=0若循环移位次数不等于1,则若循环移位次数不等于1,则OF的值不确定的值不确定例如例如:ROR CX,1ROR BH,CLROR BYTE PTR BETA,1ROR WORD PTR ALPHA,CL;寄存器循环右移;寄存器循环右移1位位;寄存器循环右移;寄存器循环右移(CL)位位;存储器循环右移;存储器循环右移1位位;存储器循环右移;存储器循环右移CL位位 2.4 8086/80882.4 8086/8088指令系统指令系统212212 (3) (3) 带进位循环左移指令带进位循环左移指令RCL (Rotate LeftRCL (Rotate Leftthrough Carry)through Carry)RCL dst,1/CL1))RCL指令将目的操作数连同进位标志指令将目的操作数连同进位标志CF一起向左循环移一起向左循环移动动1位或移位或移CL寄存器指定的位数。

      最高位移入寄存器指定的位数最高位移入CF,而,而CF移入最低位移入最低位2))RCL指令对状态标志位的影响与指令对状态标志位的影响与ROL指令相同指令相同2.4 8086/80882.4 8086/8088指令系统指令系统213213 214(4) (4) 带进位循环右移指令带进位循环右移指令RCR (Rotate RightRCR (Rotate Rightthrough Carry)through Carry)RCR dst,1/CLRCR指令将目的操作数与进位标志指令将目的操作数与进位标志CF一起向右循环移动一起向右循环移动1位或移位或移CL寄存器指定的位数最低位移入进位标志寄存器指定的位数最低位移入进位标志CF,,CF则移入最高位则移入最高位RCR指令对状态标志位的影响与指令对状态标志位的影响与ROR指令相同指令相同2.4 8086/80882.4 8086/8088指令系统指令系统214214 1.ROL/ROR/RCL/RCR四条循环移位指令与移位指令有四条循环移位指令与移位指令有所不同,循环移位之后,操作数中原来各位的信息不会所不同,循环移位之后,操作数中原来各位的信息不会丢失,而只是移到了操作数中的其他位或进位标志上,丢失,而只是移到了操作数中的其他位或进位标志上,必要时还可以恢复。

      必要时还可以恢复2.利用循环移位指令可以对寄存器或存储器中的任一位进利用循环移位指令可以对寄存器或存储器中的任一位进行位测试行位测试例如,要求测试例如,要求测试AL寄存器中第寄存器中第5位的状态是位的状态是“0”还是还是“1”,可,可 利用以下指令实现:利用以下指令实现:MOV CL,5;;(CL)←移位次数移位次数ROL AL,CL ;;(CF)←AL的第的第5位位JNC ZERO…;若;若(CF)=0,转,转ZERO;否则;否则…ZERO: … 2.4 8086/80882.4 8086/8088指令系统指令系统215215 串操作指令(自学)串操作指令(自学)1))8086/8088指令系统中有一组十分有用的串操作指令,这些指令的操作对指令系统中有一组十分有用的串操作指令,这些指令的操作对象不只是单个的字节或字,而是内存中地址连续的字节串或字串在每象不只是单个的字节或字,而是内存中地址连续的字节串或字串在每次基本操作后,能够自动修改地址,为下一次操作做好准备串操作指次基本操作后,能够自动修改地址,为下一次操作做好准备串操作指令还可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完令还可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完成预定的重复次数。

      成预定的重复次数2)串操作指令共有五类十条:)串操作指令共有五类十条:串传送指令串传送指令(字节串传送字节串传送MOVSB/字串传送字串传送MOVSBW)、串装入指令、串装入指令(字节串字节串LODSB/字串字串LODSW)、串送存指令、串送存指令(字字节串节串STOSB/字串字串STOSW)、串比较指令、串比较指令(字节串字节串CMPSB/字串字串CMPSW)和串扫描指令和串扫描指令(字节串字节串SCASB/字串字串SCASW)3 3)串操作指令的共同特点:)串操作指令的共同特点:(1) (1) 总是用总是用SISI寄存器寻址源操作数,用寄存器寻址源操作数,用DIDI寄存器寻址目的操作数源操寄存器寻址目的操作数源操作数常存放在现行的数据段,隐含段寄存器作数常存放在现行的数据段,隐含段寄存器DSDS,但也允许段超越目的,但也允许段超越目的操作数总是在现行的附加数据段,隐含段寄存器操作数总是在现行的附加数据段,隐含段寄存器ESES,不允许段超越不允许段超越2.4 8086/80882.4 8086/8088指令系统指令系统216216 (2) (2) 每一次操作以后会自动修改地址指针,是增量还是减每一次操作以后会自动修改地址指针,是增量还是减量取决于方向标志量取决于方向标志DFDF。

      当当(DF)=0(DF)=0时,地址指针增量,即字时,地址指针增量,即字节操作时地址指针加节操作时地址指针加1 1,字操作时地址指针加,字操作时地址指针加2 2当(DF)=1(DF)=1时,地址指针减量,即字节操作时地址指针减时,地址指针减量,即字节操作时地址指针减1 1,字操作,字操作时地址指针减时地址指针减2 23) (3) 有的串操作指令可加重复前缀,指令按规定的操作重有的串操作指令可加重复前缀,指令按规定的操作重复进行,重复操作的次数由复进行,重复操作的次数由CXCX寄存器决定如果在串操作寄存器决定如果在串操作指令前加上重复前缀指令前加上重复前缀REPREP,则,则CPUCPU按以下步骤执行:按以下步骤执行:① ① 首先检查首先检查CXCX寄存器,若寄存器,若(CX)=0(CX)=0则退出重复串操作指令则退出重复串操作指令② ② 指令执行一次字符串基本操作指令执行一次字符串基本操作③ ③ 根据根据DFDF标志修改地址指针标志修改地址指针④ ④ CXCX减减1(1(但不改变标志但不改变标志) )⑤ ⑤ 转至下一次循环,重复以上步骤转至下一次循环,重复以上步骤2.4 8086/80882.4 8086/8088指令系统指令系统3 3)串操作指令的共同特点:)串操作指令的共同特点:217217 (4) (4) 若若串串操操作作指指令令的的基基本本操操作作影影响响零零标标志志ZF(ZF(如如CMPSCMPS、、SCAS)SCAS),,则则可可加加重重复复前前缀缀REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ,,此此时时操操作作重重复复进进行行的的条条件件不不仅仅要要求求(CX)≠0(CX)≠0,,而而且且同同时时要要求求ZFZF的的值值满满 足足 重重 复复 前前 缀缀 中中 的的 规规 定定 (REPE/REPZ(REPE/REPZ要要 求求 (ZF)=1(ZF)=1,,REPNE/REPNZREPNE/REPNZ要求要求(ZF)=0)(ZF)=0)。

      5) (5) 串串操操作作汇汇编编指指令令的的格格式式可可以以写写上上操操作作数数,,也也可可以以只只在在指指令令助助记记符符后后加加上上字字母母““B”(B”(字字节节操操作作) )或或““W”(W”(字字操操作作) )加加上上字字母母““B”B”或或““W”W”后后,,指指令令助助记记符符后后面面不不允允许许再再写写操操作数3 3)串操作指令的共同特点:)串操作指令的共同特点:2.4 8086/80882.4 8086/8088指令系统指令系统218218 (1)(1)串传送指令串传送指令MOVS (MOVe String)MOVS (MOVe String)[REP] MOVS [ES:]dst_string,,[seg:]src_string[REP] MOVSB[REP] MOVSW1))MOVS指令也称为字符串传送指令,它将一个字节或字从存储器的指令也称为字符串传送指令,它将一个字节或字从存储器的某个区域传送到另一个区域,然后根据方向标志某个区域传送到另一个区域,然后根据方向标志DF自动修改地址自动修改地址指针其执行的操作为:指针其执行的操作为:① ① ((ES):(DI))←←((DS):(SI))② ② (SI)←←(SI) ± ± 1,,(DI)←←(DI) ± ± 1 (字节操作字节操作)(SI)←←(SI) ± ± 2,,(DI)←←(DI) ± ± 2 (字操作字操作)其中,当方向标志其中,当方向标志DF=0时用时用“++”,当,当DF=1时用时用“−”。

      2)串传送指令不影响状态标志位串传送指令不影响状态标志位3)指令格式中,方括号中的内容均表示任选项,即这些项可有可无指令格式中,方括号中的内容均表示任选项,即这些项可有可无2.4 8086/80882.4 8086/8088指令系统指令系统219219 4)在第一种格式中,串操作指令给出源操作数和目的操作数,此时指)在第一种格式中,串操作指令给出源操作数和目的操作数,此时指令执行字节操作还是字操作,取决于这两个操作数定义时的类型令执行字节操作还是字操作,取决于这两个操作数定义时的类型①①列出源操作数和目的操作数的作用:列出源操作数和目的操作数的作用:l用以说明操作对象的类型用以说明操作对象的类型(字节或字字节或字);;l明确指出涉及的段寄存器明确指出涉及的段寄存器(SEG)第一种格式的一个重要优第一种格式的一个重要优点是可以对源字符串进行段重设点是可以对源字符串进行段重设(但目的字符串的段地址只能在但目的字符串的段地址只能在 ES,不可进行段重设,不可进行段重设)②②不管源操作数和目的操作数如何指定,指令执行时,实际仍用不管源操作数和目的操作数如何指定,指令执行时,实际仍用SI和和DI寄存器寻址操作数。

      如果在指令中采用寄存器寻址操作数如果在指令中采用SI和和DI来表示操来表示操作数,则必须用类型运算符作数,则必须用类型运算符PTR说明操作对象的类型说明操作对象的类型5)在第二种和第三种格式中,串操作指令字符的后面加上一个字母)在第二种和第三种格式中,串操作指令字符的后面加上一个字母“B”或或“W”,指出操作对象是字节串或字串使用这两种格式时,,指出操作对象是字节串或字串使用这两种格式时,指令后面不允许出现操作数指令后面不允许出现操作数2.4 8086/80882.4 8086/8088指令系统指令系统220220 236例如,以下指令都是合法的:例如,以下指令都是合法的:REP MOVS DATA2,,DATA1 ;操作数类型应预先定义;操作数类型应预先定义MOVS BUF2,,ES::BUF1;源操作数进行段重设;源操作数进行段重设REP MOVS WORD PTR[DI],,[SI];用变址寄存器表示操作;用变址寄存器表示操作;数;数REP MOVSB;字节串传送;字节串传送MOVSW 但以下表示方法是非法的:但以下表示方法是非法的: MOVSB DEST,,ES::SRC 串操作指令常常与重复前缀联合使用,这样不仅可以串操作指令常常与重复前缀联合使用,这样不仅可以简化程序,而且提高了运行速度。

      但此时必须先把字简化程序,而且提高了运行速度但此时必须先把字符串的长度送符串的长度送CX寄存器中,以便控制指令结束寄存器中,以便控制指令结束 2.4 8086/80882.4 8086/8088指令系统指令系统221221 应用:将数据段中首地址为应用:将数据段中首地址为BUFFER1BUFFER1的的200200个字节个字节传送到附加数据段首地址为传送到附加数据段首地址为BUFFER2BUFFER2的内存区中的内存区中使用字节串传送指令的程序段如下:使用字节串传送指令的程序段如下:LEA SI,BUFFER1LEA DI,BUFFER2MOV CX,200CLDREP MOVSBHLT;;(SI)←←源串首地址指针源串首地址指针;;(DI)←←目的串首地址指针目的串首地址指针;;(CX)←←字节串长度字节串长度;清方向标志;清方向标志DF;传送;传送200200个字节个字节;停止;停止2.4 8086/80882.4 8086/8088指令系统指令系统222222 (2)(2)串装入指令串装入指令LODS (LOaD String)LODS (LOaD String)LODS [seg:]src_stringLODSBLODSWLODS指令是将一个字符串中的字节或字逐个装入累加器指令是将一个字符串中的字节或字逐个装入累加器AL或或AX中。

      中 指令的基本操作为:指令的基本操作为: ①① (AL)←((DS)::(SI)) 或或 (AX)←((DS)::(SI))②② (SI)←(SI)±1 ( (字节操作字节操作) )(SI)←(SI)±2 ( (字操作字操作) )其中,当方向标志其中,当方向标志DF=0时用时用“++”,,DF=1时用时用“−” LODS指令不影响状态标志位,而且一般不带重复前缀指令不影响状态标志位,而且一般不带重复前缀因为将字符串的各个值重复地装入到累加器中没有什么意因为将字符串的各个值重复地装入到累加器中没有什么意义2.4 8086/80882.4 8086/8088指令系统指令系统223223 应用:内存中以应用:内存中以BUF为首址的缓冲区内有为首址的缓冲区内有1010个非压缩型个非压缩型BCD码形式存放码形式存放的十进制数,它们的值可能是的十进制数,它们的值可能是0~90~9中的任意一个,将这些十进制数顺序显中的任意一个,将这些十进制数顺序显示在屏幕上示在屏幕上根据题意可编程如下:根据题意可编程如下:LEA SI,BUFFERMOV CX,10CLDMOV AH,02HGET:LODSBOR AL,30HMOV DL,ALINT 21HDEC CXJNZ GETHLT;;(SI)←←缓冲区首址缓冲区首址;;(CX)←←字符串长度字符串长度;清状态标志位;清状态标志位DFDF;;(AH)←←功能号功能号;取一个;取一个BCD码到码到AL;;BCD码转换为码转换为ASCII码码;;(DL)←←字符字符;显示;显示;;(CX)←(CX) −1;未完成;未完成1010个字符则重复个字符则重复预备:预备:DOS环境下环境下在屏幕上显示一个字符的方法在屏幕上显示一个字符的方法MOV AH,,02HMOV DL,,'Y'INT 21H;;(AH)←DOS系统功能号系统功能号(在屏幕上显示在屏幕上显示);;(DL)←待显示字符待显示字符’Y’的的ASCII码值码值;调用;调用DOS的的21H中断中断2.4 8086/80882.4 8086/8088指令系统指令系统224224 (3)(3)串送存指令串送存指令STOS (STOre String)STOS (STOre String)[REP] STOS[ES:] dst_string[REP] STOSB[REP] STOSWSTOS指令是将累加器指令是将累加器AL或或AX的值送存到内存缓冲区的的值送存到内存缓冲区的某个位置上。

      指令的基本操作为某个位置上指令的基本操作为::①① ((ES)::(DI))←(AL) 或或 ((ES)::(DI))←(AX)② (DI)←(DI)±1 ( (字节操作字节操作) )(DI)←(DI)±2 ( (字操作字操作) )其中,当方向标志其中,当方向标志DF=0时用时用“++”,,DF=1时用时用“−”STOS指令对状态标志位没有影响指令若加上重复前缀指令对状态标志位没有影响指令若加上重复前缀REP,则操作将一直重复进行下去,直到,则操作将一直重复进行下去,直到(CX)=02.4 8086/80882.4 8086/8088指令系统指令系统225225 应用:应用: 将字符将字符‘‘##’’装入以装入以AREAAREA为首址的为首址的100100个字个字节中根据题意可编程如下:根据题意可编程如下:LEAMOVMOVCLDREPDI,AREAAX,'##'CX,50STOSWHLT程序采用了送存程序采用了送存5050个字个字('##')('##')而不是送存而不是送存100100个字节个字节('#')('#')的方法这两种方法程序执行的结果是相同的,但前者的方法这两种方法程序执行的结果是相同的,但前者执行速度要更快一些执行速度要更快一些。

      2.4 8086/80882.4 8086/8088指令系统指令系统226226 (4)(4)串比较指令串比较指令CMPS (CoMPare String)CMPS (CoMPare String)[REPE/REPNE] CMPS [srg:]src_str,,[ES:]dst_str[REPE/REPNE] CMPSB[REPE/REPNE] CMPSW 指令将两个字符串中相应的元素逐个进行比较指令将两个字符串中相应的元素逐个进行比较( (即相减即相减) ),但不,但不将比较结果送回目的操作数,而反映在状态标志位上将比较结果送回目的操作数,而反映在状态标志位上CMPS指令对状态标志位指令对状态标志位SF、、ZF、、AF、、PF、、CF和和OF有影有影响指令的基本操作为响指令的基本操作为:① ((DS):(SI)) − ((ES):(DI))② (SI)←(SI) ±1,(DI)←(DI) ±1 ( (字节操作字节操作) )(SI)←(SI) ±2,(DI)←(DI) ±2 ( (字操作字操作) )2.4 8086/80882.4 8086/8088指令系统指令系统227227 CMPSCMPS指令与其他指令有所不同,指令中的源操作数在前,而目指令与其他指令有所不同,指令中的源操作数在前,而目的操作数在后。

      另外,的操作数在后另外,CMPSCMPS指令可以加重复前缀指令可以加重复前缀REPE(REPE(也可以写也可以写成成REPZ)REPZ)或或REPNE(REPNE(也可以写成也可以写成REPNZ)REPNZ),这是由于,这是由于CMPSCMPS指令影响标指令影响标志志ZFZF如果两个被比较的字节或字相等,则如果两个被比较的字节或字相等,则(ZF)=1(ZF)=1,否则,否则(ZF)=0(ZF)=0REPEREPE或或REPZREPZ表示当表示当(CX)≠0(CX)≠0,且,且(ZF)=1(ZF)=1时继续进行比较时继续进行比较REPNEREPNE或或REPNZREPNZ表示当表示当(CX)≠0(CX)≠0,且,且(ZF)=0(ZF)=0时继续进行比较时继续进行比较1 1))如果想在两个字符串中寻找第一个不相等的字符,则应使用如果想在两个字符串中寻找第一个不相等的字符,则应使用重复前缀重复前缀REPEREPE或或REPZREPZ,当遇到第一个不相等的字符时,,当遇到第一个不相等的字符时,就停止就停止进行比较但此时地址已被修改,即进行比较但此时地址已被修改,即(DS(DS::SI)SI)和和(ES(ES::DI)DI)已经指向下已经指向下一个字节或字地址。

      应将一个字节或字地址应将SISI和和DIDI进行修正,使之指向所要寻找的不相进行修正,使之指向所要寻找的不相等字符2 2)如果想要寻找两个字符串中第一个相等的字符,则应使用重复)如果想要寻找两个字符串中第一个相等的字符,则应使用重复前缀前缀REPNEREPNE或或REPNZREPNZ但是也有可能将整个字符串比较完毕仍未出现规但是也有可能将整个字符串比较完毕仍未出现规定的条件定的条件( (例如两个字符相等或不相等例如两个字符相等或不相等) ),不过此时寄存器(,不过此时寄存器(CX)=0CX)=0,故,故可用条件转移指令可用条件转移指令JCXZJCXZ进行处理进行处理2.4 8086/80882.4 8086/8088指令系统指令系统228228 应用:比较两个字符串,找出其中第一个不相等字符应用:比较两个字符串,找出其中第一个不相等字符的地址如果两个字符全部相同,则转到的地址如果两个字符全部相同,则转到MATCHMATCH进行进行处理这两个字符串长度均为处理这两个字符串长度均为2020,首地址分别为,首地址分别为STRING1STRING1和STRING2STRING2SI,STRING1DI,STRING2CX,20CMPSBMATCHSIDISI,0DI,0程序如下:程序如下:LEALEAMOVCLDREPEJCXZDECDECHLTMATCH:MOVMOVHLT;;(SI)←←字符串字符串1 1首地址首地址;;(DI)←←字符串字符串2 2首地址首地址;;(CX)←←字符串长度字符串长度;清方向标志;清方向标志DFDF;如相等,重复进行比较;如相等,重复进行比较;;(CX)=0则跳至则跳至MATCHMATCH;否则;否则(SI) −1;;(DI) (DI) −1 1;停止;停止;停止;停止2.4 8086/80882.4 8086/8088指令系统指令系统229229 (5)(5)串扫描指令串扫描指令SCAS (SCAn String)SCAS (SCAn String)[REPE/REPNE] SCAS [ES:] dst_string[REPE/REPNE] SCASB[REPE/REPNE] SCASW1 1))SCASSCAS指令是在一个字符串中搜索特定的关键字。

      字符串的指令是在一个字符串中搜索特定的关键字字符串的起始地址只能放在起始地址只能放在(ES(ES::DI)DI)中,不允许段超越待搜索的关中,不允许段超越待搜索的关键字必须放在累加器键字必须放在累加器ALAL或或AXAX中SCASSCAS指令的基本操作为:指令的基本操作为:①① (AL) − ((ES)::(DI)) 或或 (AX) − ((ES)::(DI))②② (DI)←(DI)±1 (字节操作字节操作) 或或 (DI)←(DI) ±2 (字操作字操作)2 2))SCASSCAS指令将累加器的内容与字符串中的元素逐个进行比指令将累加器的内容与字符串中的元素逐个进行比较,比较结果也反映在状态标志位上较,比较结果也反映在状态标志位上SCASSCAS指令将影响状指令将影响状态标志位态标志位SFSF、、ZFZF、、AFAF、、PFPF、、CFCF和和OFOF如果累加器的内容如果累加器的内容与字符串中的元素相等,则比较之后与字符串中的元素相等,则比较之后(ZF)=1(ZF)=1,因此,指令可,因此,指令可以加上重复前缀以加上重复前缀REPEREPE或或REPNEREPNE前缀REPE(REPE(即即REPZ)REPZ)表示表示当当(CX)≠0(CX)≠0,且,且(ZF)=1(ZF)=1时继续进行扫描。

      而时继续进行扫描而REPNE(REPNE(即即REPNZ)REPNZ)表示当表示当(CX)≠0(CX)≠0,且,且(ZF)=0(ZF)=0时继续进行扫描时继续进行扫描2.4 8086/80882.4 8086/8088指令系统指令系统230230 应用:在包含应用:在包含100100个字符的字符串中寻找第一个回车符个字符的字符串中寻找第一个回车符CR(CR(其其ASCIIASCII码为码为0DH)0DH),找到后将其地址保留在,找到后将其地址保留在(ES(ES::DI)DI)中,并在屏幕上显示字符中,并在屏幕上显示字符 ‘ ‘Y’Y’如果字符串中没有回车符,则在屏幕上显示字符如果字符串中没有回车符,则在屏幕上显示字符 ‘ ‘N’N’该字符串的首该字符串的首地址为地址为STRINGSTRING根据要求可编程如下:根据要求可编程如下:LEAMOVMOVCLDREPNEJZMOVJMPHIT:: DECMOVDSP::MOVINTHLTDI,,STRINGAL,,0DHCX,,100SCASBHITDL,,'N'DSPDIDL,,'Y'AH,,02H21H;;(DI)←(DI)←字符串首址字符串首址;;(AL)←(AL)←回车符回车符;;(CX)←(CX)←字符串长度字符串长度;清状态标志位;清状态标志位DFDF;如未找到,重复扫描;如未找到,重复扫描;如找到,则转;如找到,则转HITHIT;串中无回车,则;串中无回车,则(DL)←'N'(DL)←'N';转到;转到DSPDSP;;(DI)←(DI) (DI)←(DI) −1 1;;(DL)←'Y'(DL)←'Y';显示字符;显示字符 2.4 8086/80882.4 8086/8088指令系统指令系统231231 串操作指令的重复前缀、操作数和地址指针串操作指令的重复前缀、操作数和地址指针 指指 令令重复前缀重复前缀操操 作作 数数地址指针寄存器地址指针寄存器MOVSMOVSB B/ / MOVSMOVSW WREPREP目的,源目的,源ES:DIES:DI,,DS:SIDS:SILODSLODSB B/ / LODSLODSW W无无源源DS:SIDS:SISTOSSTOSB B/STOSW/STOSWREPREP目的目的ES:DIES:DICMPSCMPSB B/CMPSW/CMPSWREPE/REPNEREPE/REPNE源,目的源,目的DS:SIDS:SI,,ES:DIES:DISCASSCASB B/SCASW/SCASWREPE/REPNEREPE/REPNE目的目的ES:DIES:DI2.4 8086/80882.4 8086/8088指令系统指令系统232232 程序控制指令程序控制指令8086/80888086/8088指令系统提供了大量指令用于控制程序指令系统提供了大量指令用于控制程序的流程。

      这类指令包括的流程这类指令包括转移指令、循环控制指令、转移指令、循环控制指令、过程调用指令和中断指令等四组过程调用指令和中断指令等四组1 1))转移指令转移指令转移是一种将程序控制从一处改换到另一处的最直转移是一种将程序控制从一处改换到另一处的最直接的方法在接的方法在CPUCPU内部,转移是通过将目标地址传内部,转移是通过将目标地址传送给送给CSCS和和IP(IP(段间转移段间转移) )或或IP(IP(段内转移段内转移) )来实现的来实现的 转移指令包括转移指令包括无条件转移指令和条件转移指令无条件转移指令和条件转移指令2.4 8086/80882.4 8086/8088指令系统指令系统233233 (1-1)(1-1)无条件转移指令无条件转移指令JMP (Jump)JMP (Jump)无条件转移指令的操作是无条件地将控制转移到指无条件转移指令的操作是无条件地将控制转移到指令中指定的目标地址另外,目标地址可以用直接令中指定的目标地址另外,目标地址可以用直接的方式给出,也可以用间接的方式给出无条件转的方式给出,也可以用间接的方式给出无条件转移指令对状态标志位没有影响。

      移指令对状态标志位没有影响① ① 段内直接转移段内直接转移( (近转移近转移) )JMP near_label;;(IP)←(IP)+disp(16位位)指令的操作数是一个近标号,该标号在本段内指令汇编指令的操作数是一个近标号,该标号在本段内指令汇编以后,计算出以后,计算出JMPJMP指令的下一条指令的地址到目标地址之指令的下一条指令的地址到目标地址之间的间的1616位相对位移量位相对位移量dispdisp指令的操作是将指令指针寄存指令的操作是将指令指针寄存器器IPIP的内容加上相对位移量的内容加上相对位移量dispdisp,代码段寄存器,代码段寄存器CSCS的内的内容不变,从而使控制转移到本代码段内的目标地址处容不变,从而使控制转移到本代码段内的目标地址处相相对位移量可正可负,其范围为对位移量可正可负,其范围为−32768~+3276732768~+32767 2.4 8086/80882.4 8086/8088指令系统指令系统234234 例如:例如:JMP NEXTAND AL,,7FHNEXT::XOR AL,,7FH其中,其中,NEXTNEXT是本段内的一个标号,汇编语言计算出下一条是本段内的一个标号,汇编语言计算出下一条指令指令( (即即AND ALAND AL,,7FH)7FH)的地址与标号的地址与标号NEXTNEXT代表的地址之间代表的地址之间的相对位移量,执行的相对位移量,执行JMP NEXTJMP NEXT指令时,将上述位移量加到指令时,将上述位移量加到IPIP上,于是执行上,于是执行JMPJMP指令之后接着就执行指令之后接着就执行XOR ALXOR AL,,7FH7FH指指令,实现了程序的转移。

      令,实现了程序的转移2.4 8086/80882.4 8086/8088指令系统指令系统235235 ② ② 段内直接短转移段内直接短转移JMP short_label;;(IP)←(IP)+disp(8位位)段内直接短转移指令的操作数是一个短标号此时,段内直接短转移指令的操作数是一个短标号此时,相对相对位移量位移量dispdisp的范围为的范围为−128~+127128~+127如果已知下一条指令到如果已知下一条指令到目标地址之间的相对位移量在目标地址之间的相对位移量在−128~+127128~+127的范围内,则可的范围内,则可在标号前写上运算符在标号前写上运算符SHORTSHORT,实现段内直接短转移但,实现段内直接短转移但是,对于一个段内直接转移指令,如果相对位移量的范围是,对于一个段内直接转移指令,如果相对位移量的范围在在−128~+127128~+127,而且目标地址的标号已经定义,而且目标地址的标号已经定义( (即标号先即标号先定义后引用,这种情况称为向后引用的符号定义后引用,这种情况称为向后引用的符号) ),那么即使,那么即使在标号前没有写上运算符在标号前没有写上运算符SHORTSHORT,汇编程序也能自动生,汇编程序也能自动生成一个成一个2 2字节的短转移指令。

      这种情况属于隐含的短转字节的短转移指令这种情况属于隐含的短转移如果向前引用标号移如果向前引用标号( (即标号先引用,后定义即标号先引用,后定义) ),则在跳,则在跳转指令的标号前写上运算符转指令的标号前写上运算符SHORT(SHORT(如如JMP SHORTJMP SHORTtarget)target),否则,即使位移量的范围不超过,否则,即使位移量的范围不超过−128~+127128~+127,汇,汇编后仍会生成一个编后仍会生成一个3 3字节的近转移指令字节的近转移指令 2.4 8086/80882.4 8086/8088指令系统指令系统236236 ③ ③ 段内间接转移段内间接转移JMP reg16/mem16;;(IP)←(reg16)/(IP)←(mem16)指令的操作是一个指令的操作是一个1616位的寄存器位的寄存器(reg16)(reg16)或存储器或存储器(mem16)(mem16)地址存储器可用各种寻址方式指令的操作是用指定的地址存储器可用各种寻址方式指令的操作是用指定的寄存器或存储器中的内容取代当前寄存器或存储器中的内容取代当前IPIP的值,以实现程序的的值,以实现程序的转移。

      由于是段内转移,故转移由于是段内转移,故CSCS寄存器的内容不变寄存器的内容不变例如:例如:JMP AXJMP SIJMP TABEL[BX]JMP ALPHA_WORDJMP WORD PTR[BP][DI]其中,前两条指令的操作数是其中,前两条指令的操作数是1616位寄存器;第三、四条指位寄存器;第三、四条指令的操作数是已被定义成令的操作数是已被定义成1616位的存储器操作数;第五条指位的存储器操作数;第五条指令利用运算符令利用运算符““PTR”PTR”将存储器操作数定义为将存储器操作数定义为WORD(WORD(字,即字,即1616位位) )2.4 8086/80882.4 8086/8088指令系统指令系统237237 ④ ④ 段间直接转移指令格式及操作:段间直接转移指令格式及操作:JMP far_label;;(IP)←OFFSET far_label;;(CS)←SEG far_label指令的操作数是一个远标号,该标号在另一个代码段内指令的操作数是一个远标号,该标号在另一个代码段内指令的操作是用标号的偏移地址取代指令指针寄存器指令的操作是用标号的偏移地址取代指令指针寄存器IPIP的的内容,同时用标号所在代码段的段地址取代当前内容,同时用标号所在代码段的段地址取代当前CSCS的内的内容,结果使程序转移到另一代码段内指定的标号处。

      容,结果使程序转移到另一代码段内指定的标号处例如:例如:JMP LABEL_DECLARED_FARJMP FAR PTR LABEL_NAME其中,第一条指令中的其中,第一条指令中的LABEL_DECLARED_FAR应是一个应是一个在另一代码段内已定义的远标号;第二条指令利用运算符在另一代码段内已定义的远标号;第二条指令利用运算符PTRPTR将标号将标号LABEL_NAMELABEL_NAME的属性指定为的属性指定为FARFAR2.4 8086/80882.4 8086/8088指令系统指令系统238238 ⑤ ⑤ 段间间接转移指令格式及操作:段间间接转移指令格式及操作:JMP mem32;;(IP)←(mem32);;(CS)←(mem32+2)指令的操作数是一个指令的操作数是一个3232位的存储器位的存储器(mem32)(mem32)地址,指令的地址,指令的操作是将存储器的前两个字节送给操作是将存储器的前两个字节送给IPIP,存储器的后两个字,存储器的后两个字节送给节送给CSCS,以实现到另一个代码段的转移以实现到另一个代码段的转移例如:例如:JMP VAR_DOUBLEWORDJMP DWORD PTR[BP][DI]其中,第一条指令中的其中,第一条指令中的VAR_DOUBLEWORD是一个已经定是一个已经定义成义成3232位的存储器变量;第二条指令利用运算符位的存储器变量;第二条指令利用运算符PTRPTR将存将存储器操作数的类型定义成储器操作数的类型定义成DWORD(DWORD(双字,即双字,即3232位位) )。

      段间的间接转移指令的操作数不能是寄存器段间的间接转移指令的操作数不能是寄存器2.4 8086/80882.4 8086/8088指令系统指令系统239239 (1-2)(1-2)条件转移指令条件转移指令 Jcc short_label1))其中其中““cc”cc”表示条件在汇编语言程序设计中,常利用条件表示条件在汇编语言程序设计中,常利用条件转移指令来构成分支程序这种指令的执行包括两个过程:第一步,转移指令来构成分支程序这种指令的执行包括两个过程:第一步,测试规定的条件;第二步,如果条件满足,则转移到目标地址,否则,测试规定的条件;第二步,如果条件满足,则转移到目标地址,否则,继续顺序执行继续顺序执行2 2)条件转移指令也只有一个操作数,用以指明转移的目标地)条件转移指令也只有一个操作数,用以指明转移的目标地址但是它与无条件转移指令址但是它与无条件转移指令JMPJMP不同,条件转移指令的操作数必须是不同,条件转移指令的操作数必须是一个短标号,也就是说,一个短标号,也就是说,所有的条件转移指令都是所有的条件转移指令都是2 2字节指令,转移指字节指令,转移指令的下一条指令到目标地址之间的距离必须在令的下一条指令到目标地址之间的距离必须在−128128~~+127+127的范围内。

      的范围内如果指令规定的条件满足,则将这个位移量加到如果指令规定的条件满足,则将这个位移量加到IPIP寄存器上,即寄存器上,即(IP)←(IP)+ disp(IP)←(IP)+ disp,实现程序的转移实现程序的转移2.4 8086/80882.4 8086/8088指令系统指令系统240240 3 3)绝大多数条件转移指令)绝大多数条件转移指令( (除除JCXZJCXZ指令外指令外) )将状态标志位的将状态标志位的状态作为测试的条件因此,状态作为测试的条件因此,首先应执行影响有关状态标首先应执行影响有关状态标志位的指令,然后才能用条件转移指令测试这些标志,以志位的指令,然后才能用条件转移指令测试这些标志,以确定程序是否转移确定程序是否转移CMPCMP和和TESTTEST指令常常与条件转移指令配指令常常与条件转移指令配合使用,因为这两条指令不改变目的操作数的内容,但可合使用,因为这两条指令不改变目的操作数的内容,但可以影响状态标志位其他如加法、减法及逻辑运算指令等以影响状态标志位其他如加法、减法及逻辑运算指令等也影响状态标志位也影响状态标志位4 4))8086/80888086/8088的条件转移指令非常丰富,不仅可以测试一的条件转移指令非常丰富,不仅可以测试一个状态标志位的状态,而且可以综合测试几个状态标志位;个状态标志位的状态,而且可以综合测试几个状态标志位;不仅可以测试不仅可以测试无符号数的高无符号数的高/ /低低(Above/Below)(Above/Below),而且可以,而且可以测试测试带符号数的大带符号数的大/ /小小(Great/Less(Great/Less) ),等等,编程时使用十,等等,编程时使用十分灵活、方便。

      分灵活、方便2.4 8086/80882.4 8086/8088指令系统指令系统(1-2)(1-2)条件转移指令条件转移指令241241 条件转移指令汇总条件转移指令汇总隔隔开开的的杠杠几几个个助助记记符符实实质质表表中中同同一一行行内内用用斜斜,,上上代代表表一一条条指指令令的的不不同同表表示示方方法法同同的的无符号无符号数使用数使用BelowAbove有符号有符号数使用数使用GreaterLess 242242 应用:在内存的数据段中存放了若干个应用:在内存的数据段中存放了若干个8 8位带符号数,数位带符号数,数据块的长度为据块的长度为COUNT(COUNT(不超过不超过255)255),首地址为,首地址为TABLETABLE,试统,试统计其中正数、负数及零的个数,并分别将统计结果存入计其中正数、负数及零的个数,并分别将统计结果存入PLUSPLUS、、MINUSMINUS和和ZEROZERO单元中分析:分析:为了统计正数、负数和零的个数,可先将为了统计正数、负数和零的个数,可先将PLUSPLUS、、MINUSMINUS和和ZEROZERO三个单元清零,然后将数据表中的带符号数三个单元清零,然后将数据表中的带符号数逐个取入逐个取入ALAL寄存器并使其影响状态标志位,再利用前面介寄存器并使其影响状态标志位,再利用前面介绍的绍的JSJS、、JZJZ等条件转移指令测试该数是一个负数、零还是等条件转移指令测试该数是一个负数、零还是正数,然后分别在相应的单元中进行计数。

      正数,然后分别在相应的单元中进行计数2.4 8086/80882.4 8086/8088指令系统指令系统243243 编程如下编程如下:XOR AL,,AL;;(AL)←0(AL)←0MOV PLUS,,AL ;清;清PLUSPLUS单元单元MOV MINUS,,AL ;清;清MINUSMINUS单元单元MOV ZERO,,AL ;清;清ZEROZERO单元单元LEA SI,,TABLE ;;(SI)←(SI)←数据表首址数据表首址MOV CX,,COUNT;;(CX)←(CX)←数据表长度数据表长度CLDCHECK::LODSBOR AL,,ALJS X1JZ X2INC PLUSJMP NEXTX1::X2::INC MINUSJMP NEXTINC ZERONEXT:: LOOP CHECK HLT;清状态标志位;清状态标志位DFDF;取一个数据到;取一个数据到ALAL;使数据影响状态标志位;使数据影响状态标志位;如为负,转;如为负,转X1X1;如为零,转;如为零,转X2X2;否则为正,;否则为正,PLUSPLUS单元加单元加1 1;;MINUSMINUS单元加单元加1 1;;ZEROZERO单元加单元加1 1;;CXCX减减1 1,如不为零则转,如不为零则转CHECKCHECK;停止;停止 2.4 8086/80882.4 8086/8088指令系统指令系统244244 应用:在以应用:在以DATA1DATA1为首址的内存数据段中,存放为首址的内存数据段中,存放 了了200200个个1616位带符号数,试将其中最大和最小的带位带符号数,试将其中最大和最小的带符号数找出来,分别存放到以符号数找出来,分别存放到以MAXMAX和和MINMIN为首的内存为首的内存单元中。

      单元中分析:分析: 1 1))为了寻找最大和最小的元素,可先取出数据块中的一为了寻找最大和最小的元素,可先取出数据块中的一个数据作为标准,暂且将它同时存放到个数据作为标准,暂且将它同时存放到MAXMAX和和MINMIN单元中然后单元中然后将数据块中的其他数据逐个分别与将数据块中的其他数据逐个分别与MAXMAX和和MINMIN中的数相比较,中的数相比较,凡大于凡大于MAXMAX者,取代原来者,取代原来MAXMAX中的内容,凡小于中的内容,凡小于MINMIN者,取代原者,取代原来来MINMIN中的内容,最后即可得到数据块中最大和最小的带符号中的内容,最后即可得到数据块中最大和最小的带符号数 2 2)必须注意,比较带符号数的大小时,应该采用)必须注意,比较带符号数的大小时,应该采用JGJG和和JLJL等条件转移指令等条件转移指令2.4 8086/80882.4 8086/8088指令系统指令系统245245 编程如下:编程如下:LEA SI,,DATA1 ;;(SI)←(SI)←数据块首址数据块首址MOV CX,,200CLDLODSW;;(CX)←(CX)←数据块长度数据块长度;清方向标志;清方向标志DFDF;取一个;取一个1616位带符号数到位带符号数到AXAXMOV MAX,,AX ;送;送MAXMAX单元单元MOV MIN,,AX;送;送MINMIN单元单元DEC CXLODSWNEXT::;;(CX)←(CX) (CX)←(CX) −1 1;取下一个;取下一个1616位带符号数位带符号数CMP AX,,MAX ;与;与MAXMAX单元内容比较单元内容比较JG GREATER ;大于;大于MAXMAX,则转,则转GREATERGREATERCMP AX,,MINJL LESSJMP GOON;否则,与;否则,与MINMIN单元内容比较单元内容比较;小于;小于MINMIN,则转,则转LESSLESS;否则,转;否则,转GOONGOON GREATER:: MOV MAX,,AX ;;(MAX)←(AX)(MAX)←(AX)JMP GOON;转;转GOONGOONLESS::GOON::MOV MIN,,AXLOOP  NEXTHLT;;(MIN)←(AX)(MIN)←(AX);;CXCX减减1 1,若不等于零则转移,若不等于零则转移;停止;停止 2.4 8086/80882.4 8086/8088指令系统指令系统246246 (2)(2)循环控制指令循环控制指令(2-1) (2-1)  LOOPLOOPLOOP short_labelLOOPLOOP指令要求使用指令要求使用CXCX作为计数器,指令的操作是先将作为计数器,指令的操作是先将CXCX的内容减1,如果结果不等于零,则转到指令中指定的内容减1,如果结果不等于零,则转到指令中指定的短标号处;否则,顺序执行下一条指令。

      的短标号处;否则,顺序执行下一条指令因此,在循环因此,在循环程序开始前,应将循环次数送程序开始前,应将循环次数送CXCX寄存器指令的操作数寄存器指令的操作数只能是一个短标号,即跳转距离不超过只能是一个短标号,即跳转距离不超过−128~+127128~+127的范的范围LOOPLOOP指令对状态标志位没有影响指令对状态标志位没有影响2.4 8086/80882.4 8086/8088指令系统指令系统247247 (2-2) (2-2)  LOOPE/LOOPZ (LOOP ifLOOPE/LOOPZ (LOOP if Equal/LOOP if Zero) Equal/LOOP if Zero)LOOPE short_label/LOOPZ short_label1))以上两种格式实际上代表同一条指令本指令的操作也是以上两种格式实际上代表同一条指令本指令的操作也是先将先将CXCX寄存器的内容减1,如结果不为零,且零标志寄存器的内容减1,如结果不为零,且零标志(ZF)=1(ZF)=1,则转移到指定的短标号则转移到指定的短标号LOOPE/LOOPZLOOPE/LOOPZ指令对指令对状态标志位也没有影响。

      状态标志位也没有影响2 2)该条指令有条件地形成循环,即当规定的循环次数尚未完)该条指令有条件地形成循环,即当规定的循环次数尚未完成时,还必须满足成时,还必须满足““相等相等””或者或者““等于零等于零””的条件才能继续循的条件才能继续循环2-3) (2-3)  LOOPNE/LOOPNZ (LOOP if NotLOOPNE/LOOPNZ (LOOP if Not Equal/LOOP if Not Zero) Equal/LOOP if Not Zero)LOOPNE short_label/LOOPNZ short_label本指令同样也有两种表示形式指令的操作是将本指令同样也有两种表示形式指令的操作是将CXCX寄存寄存器的内容减1,如结果不为零,且零标志器的内容减1,如结果不为零,且零标志(ZF)=0 ((ZF)=0 (表示表示““不不相等相等””或或““不等于零不等于零””) ),则转移到指定的短标号这条指令,则转移到指定的短标号这条指令 对状态标志位也没有影响对状态标志位也没有影响2.4 8086/80882.4 8086/8088指令系统指令系统248248 (3)(3)过程调用指令过程调用指令如果有一些程序段需要在不同的地方多次反复如果有一些程序段需要在不同的地方多次反复地出现,则可以将这些程序段设计成为过程地出现,则可以将这些程序段设计成为过程( (相相当于子程序当于子程序) ),每次需要时进行调用。

      过程结束,每次需要时进行调用过程结束后,再返回原来调用的地方采用这种方法不后,再返回原来调用的地方采用这种方法不仅可以使源程序的总长度大大缩短,而且有利仅可以使源程序的总长度大大缩短,而且有利于实现模块化的程序设计,使程序的编制、阅于实现模块化的程序设计,使程序的编制、阅读和修改都比较方便读和修改都比较方便被调用的过程可以在本段内被调用的过程可以在本段内( (近过程近过程) ),也可在其他段,也可在其他段( (远过程远过程) )调用的过程地址可以用直接的方式给出,也可用间接的方式给出过调用的过程地址可以用直接的方式给出,也可用间接的方式给出过程调用指令和返回指令对状态标志位都没有影响程调用指令和返回指令对状态标志位都没有影响2.4 8086/80882.4 8086/8088指令系统指令系统249249 (3-1) (3-1) 过程调用指令过程调用指令CALL(CALL procedure)CALL(CALL procedure) ① ① 段内直接调用段内直接调用CALL near_proc ;;(SP)←(SP) −2,,((SP)+1::(SP))←(IP);;(IP)←(IP) + disp指令的操作数是一个近过程,该过程在本段内。

      指令汇编以指令的操作数是一个近过程,该过程在本段内指令汇编以后,得到后,得到CALLCALL的下一条指令与被调用的过程入口地址之间的下一条指令与被调用的过程入口地址之间的的1616位相对位移量位相对位移量disp disp 指令的操作是将指令指针指令的操作是将指令指针IPIP压入堆压入堆栈,然后将相对位移量栈,然后将相对位移量dispdisp加到加到IPIP上,从而使程序转移到被上,从而使程序转移到被调用的过程处执行调用的过程处执行相对位移量相对位移量dispdisp的范围为的范围为−32768 ~32768 ~+32767+32767,占,占2 2个字节,段内直接调用指令为个字节,段内直接调用指令为3 3字节指令字节指令② ② 段内间接调用段内间接调用CALL reg16/mem16CALL reg16/mem16;;(SP)←(SP)(SP)←(SP)−2 2,,((SP)+1((SP)+1::(SP))←(IP)(SP))←(IP);;(IP)←(reg16)/(mem16)(IP)←(reg16)/(mem16)指令的操作数是一个指令的操作数是一个1616位的寄存器或存储器,其中的内容是位的寄存器或存储器,其中的内容是一个近过程的入口地址。

      本指令将一个近过程的入口地址本指令将IPIP寄存器压入堆栈,然后寄存器压入堆栈,然后将寄存器或存储器的内容传送到将寄存器或存储器的内容传送到IPIP2.4 8086/80882.4 8086/8088指令系统指令系统250250 ③ ③ 段间直接调用段间直接调用CALL far_proc;(SP)←(SP) −2, ((SP)+1:(SP))←(CS);;(CS)←SEG far_proc;;(SP)←(SP) −2,, ((SP)+1::(SP))←(IP);;(IP)←OFFSET far_proc指令的操作数是一个远过程,该过程在另外的代码段内指令的操作数是一个远过程,该过程在另外的代码段内段间直接调用指令先将段间直接调用指令先将CSCS中的段地址压入堆栈,并将远中的段地址压入堆栈,并将远过程所在段的段地址过程所在段的段地址SEG far_procSEG far_proc送送CSCS;再将;再将IPIP中的偏中的偏移地址压入堆栈,然后将远过程的偏移地址移地址压入堆栈,然后将远过程的偏移地址OFFSETOFFSETfar_procfar_proc送送IPIP3-1) 3-1) 过程调用指令过程调用指令CALL(CALL procedure)CALL(CALL procedure)2.4 8086/80882.4 8086/8088指令系统指令系统251251 ④ ④ 段间间接调用段间间接调用CALL mem32;;(SP)←(SP) −2,, ((SP)+1::(SP))←(CS);;(CS)←(mem32+2);;(SP)←(SP) −2,, ((SP)+1::(SP))←(IP);;(IP)←(mem32)指令的操作数是一个指令的操作数是一个3232位的存储器地址,指令的操作是先位的存储器地址,指令的操作是先将将CSCS压入堆栈,并将存储器操作数的后两个字节送压入堆栈,并将存储器操作数的后两个字节送CSCS;;再将再将IPIP压入堆栈,然后将存储器操作数的前两个字节送压入堆栈,然后将存储器操作数的前两个字节送IPIP,于是程序转到另一个代码段的远过程处执行。

      于是程序转到另一个代码段的远过程处执行3-1) 3-1) 过程调用指令过程调用指令CALL(CALL procedure)CALL(CALL procedure)2.4 8086/80882.4 8086/8088指令系统指令系统252252 (3-2) (3-2) 过程返回指令过程返回指令RET (RETurn from procedure)RET (RETurn from procedure) ① ① 从近过程返回:从近过程返回:RET;;(IP)←((SP) + 1::(SP)),, (SP)←(SP)+2RET pop_value ;;(IP)←((SP) + 1::(SP)),, (SP)←(SP)+2;;(SP)←(SP) + pop_value② ② 从远过程返回:从远过程返回:RET;;(IP)←((SP) + 1::(SP)),, (SP)←(SP)+2;;(CS)←((SP) + 1::(SP)),,(SP)←(SP)+2RET pop_value ;;(IP)←((SP) + 1::(SP)),, (SP)←(SP)+2;;(CS)←((SP) + 1::(SP)),,(SP)←(SP)+2;;(SP)←(SP) + pop_value2.4 8086/80882.4 8086/8088指令系统指令系统过程返回时,要有出栈操作。

      过程返回时,要有出栈操作253253 1.1.过程体中一般总是包含返回指令过程体中一般总是包含返回指令RETRET,它将堆栈中的断点弹出,控制,它将堆栈中的断点弹出,控制程序返回到原来调用过程的地方通常,程序返回到原来调用过程的地方通常,RETRET指令的类型是隐含的,指令的类型是隐含的,它自动与过程定义时的类型匹配,如为近过程,返回时将栈顶的字它自动与过程定义时的类型匹配,如为近过程,返回时将栈顶的字弹出到弹出到IPIP寄存器;如为远过程,返回时先从栈顶弹出一个字到寄存器;如为远过程,返回时先从栈顶弹出一个字到IPIP,,接着再弹出一个字到接着再弹出一个字到CS2.2.RETRET指令还允许带一个弹出值指令还允许带一个弹出值(pop_value),是一个范围为,是一个范围为0~~64 K的的立即数,通常是偶数弹出值表示返回时从堆栈中舍弃的字节数立即数,通常是偶数弹出值表示返回时从堆栈中舍弃的字节数例如,例如,RET 4,返回时舍弃堆栈中的,返回时舍弃堆栈中的4 4个字节这些字节一般是调用个字节这些字节一般是调用前通过堆栈向过程传递的参数前通过堆栈向过程传递的参数2.4 8086/80882.4 8086/8088指令系统指令系统254254 (4)(4)中断指令中断指令8086/8088 CPU可以在程序中安排一条中断指令来引起一可以在程序中安排一条中断指令来引起一个中断过程,这种中断称为软件中断。

      个中断过程,这种中断称为软件中断指令格式:指令格式:INT n1 1)) 可以用可以用INT nINT n指令来产生软件中断,中断指令的操作数指令来产生软件中断,中断指令的操作数n n给出了中给出了中断类型号,断类型号,CPUCPU执行执行INT nINT n指令后,会立即产生一个类型号为指令后,会立即产生一个类型号为n n的中断,转的中断,转入相应的中断处理程序来完成中断功能入相应的中断处理程序来完成中断功能2 2)有关中断的概念、中断的处理过程以及中断指令执行等的详细情)有关中断的概念、中断的处理过程以及中断指令执行等的详细情况可参照其它有关章节况可参照其它有关章节2.4 8086/80882.4 8086/8088指令系统指令系统255255 处理器控制指令处理器控制指令这一类指令用于对这一类指令用于对CPU进行控制,例如对进行控制,例如对CPU中某些状态标志位的状中某些状态标志位的状态进行操作,以及使态进行操作,以及使CPU暂停、等待等等暂停、等待等等8086/8088指令系统的指令系统的处理器控制处理器控制指令可分为标志位操作指令、外部同步指令、空操作指令等三组指令可分为标志位操作指令、外部同步指令、空操作指令等三组。

      标志位操作指令标志位操作指令标志位操作指令有以下标志位操作指令有以下7 7种:种:1))CLC (CLear Carry flag)::清进位标志指令的操作为清进位标志指令的操作为(CF)←0(CF)←02))STC (SeT Carry flag)::置进位标志指令的操作为置进位标志指令的操作为(CF)←1(CF)←13))CMC (CoMplement Carry flag):对进位标志求反指令的操作为对进位标志求反指令的操作为(CF)←(CF)2.4 8086/80882.4 8086/8088指令系统指令系统256256 4))CLD (CLear Direction flag):清方向标志指令的操作为:清方向标志指令的操作为(DF)←05))STD (SeT Direction flag):置方向标志指令的操作为:置方向标志指令的操作为(DF)←16))CLI (CLear Interrupt flag):清中断允许标志指令的操作为:清中断允许标志指令的操作为(IF)←07))STI (SeT Interrupt flag):置中断允许标志指令的操作为:置中断允许标志指令的操作为(IF)←1。

      执行执行这条指令后,这条指令后,CPUCPU将允许外部的可屏蔽中断请求将允许外部的可屏蔽中断请求 标志位操作指令仅对有关状态标志位执行操标志位操作指令仅对有关状态标志位执行操 作,而对其他状态标作,而对其他状态标志位则没有影响志位则没有影响2.4 8086/80882.4 8086/8088指令系统指令系统257257 外部同步指令外部同步指令(1)￿HLT (HaLT)HLT执行执行HLT指令后,指令后,CPUCPU进入暂停状态外部中断进入暂停状态外部中断( (当当(IF)=1时的可屏蔽中断请求时的可屏蔽中断请求INTRINTR,或非屏蔽中断请求,或非屏蔽中断请求NMI)NMI)或复或复位信号位信号RESETRESET可使可使CPUCPU退出暂停状态退出暂停状态HLTHLT指令对状态指令对状态标志位没有影响标志位没有影响2) WAITWAIT1))如果如果8086/8088 CPU8086/8088 CPU的的/TEST/TEST引脚上的信号无效引脚上的信号无效( (即高电即高电平平) ),则,则WAITWAIT指令使指令使CPUCPU进入等待状态一个被允许的外进入等待状态一个被允许的外部中断或部中断或/TEST/TEST信号有效,可使信号有效,可使CPUCPU退出等待状态。

      退出等待状态2 2)在允许中断的情况下,一个外部中断请求将使)在允许中断的情况下,一个外部中断请求将使CPUCPU离开等离开等待状态,转向中断服务程序此时被推入堆栈进行保护的待状态,转向中断服务程序此时被推入堆栈进行保护的断点地址即是断点地址即是WAITWAIT指令的地址,因此从中断返回后又执指令的地址,因此从中断返回后又执行行WAIT指令,指令,CPUCPU再次进入等待状态再次进入等待状态2.4 8086/80882.4 8086/8088指令系统指令系统258258 空操作指令空操作指令 NOP (No Operation)指令格式:指令格式:NOP执行执行NOP指令时不进行任何操作,但指令时不进行任何操作,但占用占用3 3个时钟周期个时钟周期,,然后继续执行下一条指令然后继续执行下一条指令NOP指令对状态标志位没有影指令对状态标志位没有影响,指令没有操作数响,指令没有操作数2.4 8086/80882.4 8086/8088指令系统指令系统259259 80868086指令系统总结指令系统总结 寻址方式寻址方式操作数不同,寻址方式不同操作数不同,寻址方式不同两种操作数:两种操作数:数据操作数数据操作数(包括:立即数、寄存器、存储(包括:立即数、寄存器、存储器、器、I/O操作数);操作数);地址操作数地址操作数(立即数、寄存器、存储(立即数、寄存器、存储器)。

      器)数据操作数数据操作数立即数:立即数:8 8位、位、1616位位寄存器:寄存器:AXAX、、BXBX、、CXCX、、DXDX、、SPSP、、BPBP、、SISI、、DIDI、、AHAH、、 ALAL、、BHBH、、BLBL、、CHCH、、CLCL、、DHDH、、DLDL存储器:段地址+有效地址,定义有效地址的三个分量为,偏移量、基地址存储器:段地址+有效地址,定义有效地址的三个分量为,偏移量、基地址 寄存器、变址寄存器寄存器、变址寄存器I/OI/O操作数:端口(数据操作数)操作数:端口(数据操作数)2.4 8086/80882.4 8086/8088指令系统指令系统260260 地址操作数:地址操作数:段内直接寻址(相对寻址),段内直接寻址(相对寻址),8 8位、位、1616位立即数(带符号位立即数(带符号的)与的)与IPIP的内容相加;的内容相加;段内间接寻址,段内间接寻址,1616位寄存器操作数或两个连续的位寄存器操作数或两个连续的8 8位存储器位存储器操作数替代操作数替代IPIP的内容;的内容;段间直接寻址,通过已定义的标号,将该标号所在段的段地段间直接寻址,通过已定义的标号,将该标号所在段的段地址、偏移量分别取代址、偏移量分别取代CSCS、、IPIP的内容;的内容;段间间接寻址,通过存储器操作数寻址,将连续四个存储器段间间接寻址,通过存储器操作数寻址,将连续四个存储器单元的值分别取代单元的值分别取代CSCS(高地址两个字节)、(高地址两个字节)、IPIP的内容(低的内容(低地址两个字节)。

      地址两个字节)2.4 8086/80882.4 8086/8088指令系统指令系统261261 指令的种类指令的种类1、数据传送类:、数据传送类:ØMOV、、PUSH、、POP、、XCHG、、XLAT、、IN、、OUT,,ØLEA、、LDS、、LESØLAHF、、SAHF、、POPF、、PUSHF2、算术运算指令:、算术运算指令:ØADD、、ADC、、INC、、SUB、、SBB、、DEC、、CMP、、MUL、、ØIMUL、、DIV、、IDIV;;CBW、、CWD;;ØAAA、、DAA、、AAS、、DAS、、AAM、、AAD3、位操作指令、位操作指令ØAND、、TEST、、OR、、XOR、、NOT;;ØSHL、、SAL、、SHR、、SAR;;ROL、、ROR、、RCL、、RCR4、串操作指令、串操作指令ØMOVS、、LODS、、STOS、、CMPS、、SCAS5、控制转移指令、控制转移指令ØJMP、、Jcc;;LOOP、、LOOPE、、LOOPZ、、LOOPNE、、ØLOOPNZ;;CALL、、RET;;INT n6、处理器控制指令、处理器控制指令ØCLC、、STC、、CMC、、CLD、、STD、、CLI、、STIØHLT、、WAIT、、ESC、、LOCKØNOP2.4 8086/80882.4 8086/8088指令系统指令系统262262 寻址方式寻址方式计算计算EAEA所需时钟数所需时钟数寻址方式寻址方式计算计算EAEA所需时钟数所需时钟数直接寻址直接寻址6 6相对基址变址寻址相对基址变址寻址[BP+DI+[BP+DI+位移位移] ]、、[BX+SI+[BX+SI+位移位移] ]1111寄存器间接寻址寄存器间接寻址5 5寄存器相对寻址寄存器相对寻址9 9基址变址寻址基址变址寻址[BP+DI][BP+DI]、、[BX+SI][BX+SI]7 7相对基址变址寻址相对基址变址寻址[BP+SI+[BP+SI+位移位移] ]、、[BX+DI+[BX+DI+位移位移] ]1212基址变址寻址基址变址寻址[BP+SI][BP+SI]、、[BX+DI][BX+DI]8 8281指令执行时间指令执行时间 计算有效地址的时间计算有效地址的时间2.4 8086/80882.4 8086/8088指令系统指令系统263263 指令指令所需时钟周期所需时钟周期访问内存次数访问内存次数ADD或或SUBReg ─→ Reg30Mem ─→ Reg9+EA1Reg ─→ Mem16+EA2Imm ─→ Reg40Imm ─→ Mem17+EA2MOVReg ─→ Reg20Mem ─→ Reg8+EA1Reg ─→ Mem9+EA1Imm ─→ Reg40Imm ─→ Mem10+EA1Mem ─→ Seg8+EA1Seg ←→ Reg20Seg ─→Mem9+EA1指令执行时间指令执行时间不含取指时间且假设存储器数据规则存放不含取指时间且假设存储器数据规则存放2.4 8086/80882.4 8086/8088指令系统指令系统264264 指令指令所需时钟周期所需时钟周期访问内存次数访问内存次数MULAcc×Reg870~770Acc×Reg16118~1330Acc×Mem8(76~83)+EA1Acc×Mem16(124~139)+EA1IMULAcc×Reg880~980Acc×Reg16128~1540Acc×Mem8(86~104)+EA1Acc×Mem16(134~160)+EA1DIVAX÷Reg880~900DX:AX÷Reg16144~1620AX÷Mem8(86~96)+EA1DX:AX÷Mem16(150~168)+EA1IDIVAX÷Reg8101~1120DX:AX÷Reg16165~1840AX÷Mem8(107~118)+EA1DX:AX÷Mem16(171~190)+EA12.4 8086/80882.4 8086/8088指令系统指令系统265265 指令指令所需时钟周期所需时钟周期访问内存次数访问内存次数循环和移位循环和移位在在RegReg中移中移1 1位位20在在RegReg中移中移CLCL位位8+4*((CL))0在在MemMem中移中移1 1位位15+EA2在在MemMem中移中移CLCL位位20+4*((CL))+EA2JMP段内直接转移段内直接转移150段间直接转移段间直接转移150段内间接转移段内间接转移18+EA1段间间接转移段间间接转移24+EA2条件转移条件转移JCXZ6(不转移)(不转移)018(转移)(转移)其它条件转移其它条件转移4(不转移)(不转移)016(转移)(转移)2.4 8086/80882.4 8086/8088指令系统指令系统266266 2.4.6 802862.4.6 80286增强与增加的指令增强与增加的指令PUSHA,,POPA指指令将所有通用寄存令将所有通用寄存器的内容压入或弹器的内容压入或弹出堆栈。

      压入的顺出堆栈压入的顺序是:序是:AX,,CX,,DX,,BX,,SP,,BP,,SI,,DI(SP是是执行该指令之前的执行该指令之前的值值),弹出的顺序,弹出的顺序与压入的相反与压入的相反2.4 8086/80882.4 8086/8088指令系统指令系统267267 2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展 2.5.1 80x862.5.1 80x86系列微处理器概况系列微处理器概况80x86是美国是美国Intel 公司生产的系列微处理器公司生产的系列微处理器Intel公司公司成立于成立于1968年,年,1969年就设计了年就设计了4位的位的4004 芯片,芯片,1973年年开发出开发出8位的位的8080芯片,芯片,1978年正式推出年正式推出16位的位的8086微处微处理器芯片,由此开始了理器芯片,由此开始了Intel公司的公司的80x86系列微处理器的系列微处理器的生产历史生产历史2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展268268 80x8680x86系列微处理器一般对比系列微处理器一般对比集成度:指集成度:指CPU芯片中所包含的万只晶体管数。

      芯片中所包含的万只晶体管数主主 频:指芯片所使用的主时钟频率频:指芯片所使用的主时钟频率2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展269269 80x8680x86系列微处理器支持的存储器三级结构系列微处理器支持的存储器三级结构1 1)当前没有使用的程序可存入外存,如硬盘、软盘、光盘)当前没有使用的程序可存入外存,如硬盘、软盘、光盘等,外存的容量通常很大,可达等,外存的容量通常很大,可达GBGB甚至甚至TBTB级;级;2 2)当前正在执行的程序或要使用的数据必须从外存调入主)当前正在执行的程序或要使用的数据必须从外存调入主存后才能被存后才能被CPUCPU读取并执行;读取并执行; 主存容量理论上可达主存容量理论上可达GB级(如级(如Pentium II可配置的内存最大容量可可配置的内存最大容量可达达236=64G),但基于成本和必要性考虑,目前微型计算机内存配置一),但基于成本和必要性考虑,目前微型计算机内存配置一般都不会达到其理论允许值,通常只是几百般都不会达到其理论允许值,通常只是几百MB至几个至几个GB;;3 3))CacheCache是介于传统是介于传统CPUCPU和主存之间的高速缓冲存储器,其和主存之间的高速缓冲存储器,其最大特点是存取速度快,但容量较小,通常为最大特点是存取速度快,但容量较小,通常为KB~MBKB~MB级。

      级2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展270270 存储器三级结构8038680386之前的之前的CPUCPU都没有都没有CacheCache80386 CPU80386 CPU内无内无CacheCache,而由与之配套使,而由与之配套使用的用的Intel 82385 Cache Intel 82385 Cache 控制器实现控制器实现CPUCPU之外的之外的CacheCache管理8048680486之后之后的的CPUCPU芯片内部都集成了一至多个芯片内部都集成了一至多个CacheCache高速缓冲存储器高速缓冲存储器((Cache))微处理器微处理器CPU主存储器主存储器(主存)(主存)外存储器外存储器(外存)(外存)当前使用频率较高的程序和数据通过一定的替换机制从主当前使用频率较高的程序和数据通过一定的替换机制从主存放入存放入CacheCache,,CPUCPU在取指令或读取操作数时,同时对在取指令或读取操作数时,同时对CacheCache和主存进行访问,如果和主存进行访问,如果CacheCache命中,则终止对主存的命中,则终止对主存的访问,直接从访问,直接从CacheCache中将指令或数据送中将指令或数据送CPUCPU处理,由于处理,由于CacheCache的速度比主存快得多,因此,的速度比主存快得多,因此,CacheCache的使用大大提的使用大大提高了高了CPUCPU读取指令或数据的速度。

      读取指令或数据的速度271271 2.5.2 80x862.5.2 80x86寄存器组寄存器组1)寄存器在计算机中起着非常重要的作用,)寄存器在计算机中起着非常重要的作用,每个寄存器相每个寄存器相当于运算器中的一个存储单元当于运算器中的一个存储单元,但由于寄存器位于,但由于寄存器位于CPU内部,内部,对它们进行访问时不需要启动一个总线周期,因此其存取速对它们进行访问时不需要启动一个总线周期,因此其存取速度要度要比存储器快得多比存储器快得多寄存器用来存放计算过程中所需要的寄存器用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、操作数以及运算的或所得到的各种信息,包括操作数地址、操作数以及运算的中间结果等中间结果等2)寄存器可分为程序可见寄存器和程序不可见寄存器两大)寄存器可分为程序可见寄存器和程序不可见寄存器两大类程序可见寄存器,是指在汇编语言程序设计中可以通过类程序可见寄存器,是指在汇编语言程序设计中可以通过指令来访问的寄存器;程序不可见寄存器是指一般用户程序指令来访问的寄存器;程序不可见寄存器是指一般用户程序中不能访问而由系统所使用的寄存器中不能访问而由系统所使用的寄存器。

      2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展272272 AHALBHBLCHCLDHDL80x86 CPU80x86 CPU内部程序可见寄存器组内部程序可见寄存器组016 1531EAXEBXECXEDXSP016 1531ESP堆栈指针寄存器堆栈指针寄存器指针指针BX 基址寄存器基址寄存器CX 计数寄存器计数寄存器DX 数据寄存器数据寄存器AX 累加器累加器数据数据寄存器寄存器通用通用寄存器寄存器31寄存器寄存器变址变址寄存器寄存器控制寄存器控制寄存器BPSIDIIPFLAGSCS0016 1515基址寄存器基址寄存器源变址寄存器源变址寄存器目的变址寄存器目的变址寄存器指令指针寄存器指令指针寄存器状态标志寄存器状态标志寄存器代码段寄存器代码段寄存器数据段寄存器数据段寄存器堆栈段寄存器堆栈段寄存器附加数据段寄存器附加数据段寄存器段寄存器段寄存器EBPESIEDIEIPEFLAGS注意:注意:①①对于对于8086/8088和和80286,,阴影区域是不可用的;阴影区域是不可用的;②②FS和和GS寄存器无专用寄存器无专用名称32位名称位名称8位位/16位名称位名称 名称名称DSSSESFSGS加了字母加了字母E E表示是表示是3232位的寄位的寄存器,是在存器,是在80868086基础上的扩基础上的扩展。

      其低展其低1616位可以独立存取位可以独立存取273273 2.5.3 80x862.5.3 80x86存储器管理存储器管理1)存储器管理是由微处理器的存储器管理部件)存储器管理是由微处理器的存储器管理部件MMU提供的对提供的对系统存储器资源进行管理的机制,其目的是方便程序对存储器系统存储器资源进行管理的机制,其目的是方便程序对存储器的应用2)从)从8086/8088到到Pentium,,80x86系列微处理器的存储器管理系列微处理器的存储器管理机制有了较大变化机制有了较大变化2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展Ø8086/80888086/8088只有一种存储器管理方式,即实地址方式只有一种存储器管理方式,即实地址方式( (简称实方式简称实方式) );;Ø80286 CPU80286 CPU具有两种工作方式,即实方式和保护虚地址方式具有两种工作方式,即实方式和保护虚地址方式( (简称保护方式简称保护方式) );;Ø8038680386及其以后的及其以后的CPUCPU有三种工作方式,即实地址方式、保护虚拟地址式和有三种工作方式,即实地址方式、保护虚拟地址式和虚拟虚拟80868086方式。

      方式274274 实地址方式实地址方式( (简称实方式简称实方式) )1)实方式是)实方式是80x86系列系列CPU共有的存储器管理模式,而共有的存储器管理模式,而8086/8088 CPU只能工作在此方式下;只能工作在此方式下;2)实方式下)实方式下 CPU通过存储器分段来实现对通过存储器分段来实现对1 M个存储器单元的个存储器单元的直接访问特别是直接访问特别是80286、、80386、、80486以及以及Pentium的地址总的地址总线位数分别增加为线位数分别增加为24、、32、、32、、36(见表见表3.1),但在实方式下,,但在实方式下,它们都只能使用低它们都只能使用低20位地址线,它们位地址线,它们所能寻址的存储空间与所能寻址的存储空间与8086/8088一样,也只有一样,也只有1 MB3)在实方式下,)在实方式下,CPU把从指令中得到的逻辑地址把从指令中得到的逻辑地址(段地址:段段地址:段内偏移地址内偏移地址)转换为转换为20位物理地址不管位物理地址不管CPU的实际地址引脚有的实际地址引脚有多少根,在此方式下工作时,多少根,在此方式下工作时,只能用其低只能用其低20根地址线对根地址线对1 M个个存储单元进行访问。

      存储单元进行访问2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展275275 保护虚拟地址方式保护虚拟地址方式( (简称保护方式简称保护方式) )1 1)在实方式下,)在实方式下,8028680286及其后续及其后续CPUCPU只相当于一个快速的只相当于一个快速的80868086,没有真,没有真正发挥其高性能正发挥其高性能CPUCPU的作用而这些的作用而这些CPUCPU的特点是能可靠地支持多用的特点是能可靠地支持多用户系统,即使是单用户,也可支持多任务操作,这就要求用新的存户系统,即使是单用户,也可支持多任务操作,这就要求用新的存储器管理机制储器管理机制————保护方式对存储器系统进行管理保护方式对存储器系统进行管理所谓保护,主所谓保护,主要是对存储器的保护要是对存储器的保护2 2)在保护方式下,机器可提供虚拟存储管理和多任务管理机制在保护方式下,机器可提供虚拟存储管理和多任务管理机制Ø虚拟存储的实现可使用户程序的大小不受主存空间的限制虚拟存储的实现可使用户程序的大小不受主存空间的限制Ø多任务管理机制的实现可允许多个用户或一个用户的多个任务多任务管理机制的实现可允许多个用户或一个用户的多个任务同时在机器上运行。

      同时在机器上运行3 3)虚拟存储器)虚拟存储器(Virtual Memory)(Virtual Memory)由存储器管理机制以及一个大容量的由存储器管理机制以及一个大容量的快速硬盘存储器快速硬盘存储器( (内存内存) )或光盘支持或光盘支持Ø 在程序运行时,只把虚拟地址空间的一小部分映射到主存储在程序运行时,只把虚拟地址空间的一小部分映射到主存储器中,其余暂不使用部分则仍存储在硬盘上当访问主存储器的范器中,其余暂不使用部分则仍存储在硬盘上当访问主存储器的范围发生变化时,再把虚拟存储器的对应部分从磁盘调入内存,而对围发生变化时,再把虚拟存储器的对应部分从磁盘调入内存,而对主存中目前不再使用的部分,可根据一定的替换策略将其从主存储主存中目前不再使用的部分,可根据一定的替换策略将其从主存储器送回到硬盘器送回到硬盘2.5 x862.5 x86系列系列CPUCPU的技术发展的技术发展276276 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.