您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第2章-微处理器的编程结构.
第2章微处理器的编程结构2.1微处理器的三种工作模式2.2微处理器的编程结构2.3实模式下的存储器寻址2.4存储器地址的交叉及字节、字和双字的寻址2.1微处理器的三种工作模式2.1.1三种工作模式实地址模式(Real-AddressMode)也称实模式,简单地说,是指80286以上的微处理器所采用的8086的工作模式。在实模式下,采用类似8086CPU的体系结构,其寻址机制,尤其是存储器寻址,以及中断处理机制均和8086相同。1.实地址模式2.保护模式保护的虚地址模式(ProtectedVirtualAddressMode)简称虚地址模式或保护模式,是支持多任务的一种工作模式,它能提供一系列的保护机制。目的就是对程序的运行加以保护。3.虚拟8086模式虚拟8086模式(Virtual8086Mode)又称“V86模式”,是运行在保护模式中的实模式,为了在32位保护模式下执行纯16位程序。它不是一个真正的CPU模式,还属于保护模式,它是既有保护功能又能执行8086代码的工作模式。2.1.2三种工作模式的相互转换图2-1三种工作模式的相互转换上电或复位实地址模式保护模式设置CR0中b0位(b0=1)V86模式复位执行IRETD指令或任务切换中断复位CR0中b0位(b0=0)以上所分析的三种工作模式可以相互转换,三种工作模式的转换图如图2-1所示。2.2微处理器的编程结构2.2.116位微处理器的编程结构1.8086CPU内部结构框图8086CPU从功能上看,它由两大部件组成,分为总线接口部件BIU和执行部件EU。微处理器的编程结构是指编程人员眼中看到的微处理器的软件结构模型。软件结构为编程人员从软件的角度去了解计算机系统的操作和运行提供了便利。编程人员主要掌握微处理器内部的各种寄存器的组成、功能及如何使用它们等。内部数据总线(16位)AHALBHBLCHCLDHDL堆栈指针SP基址指针BP源变址DI目的变址SI通用寄存器暂存寄存器ALU标志寄存器FlagsEU控制电路执行单元EU地址总线20位(8位)∑代码段CS数据段DS堆栈段SS附加段ES指令指针IP内部暂存器123456数据总线8088:8位8086:16位I/O控制逻辑指令队列80888086段寄存器外部总线总线接口单元BIU图2-28086CPU内部结构框图BXAXDXCX总线接口部件BIU是8086CPU与外部存储器和I/O端口的接口,它提供了16位双向数据总线和20位地址总线,负责CPU与存储器及I/O端口之间的数据传送操作。8086CPU的BIU取指令和EU执行指令是并行进行的,这种并行工作方式大大提高了系统的工作速度。执行部件EU从BIU中的指令队列获取指令,对指令进行译码分析并执行,执行指令所需要的操作数和运算结果都是通过总线接口部件与指定的内存单元或外设端口进行传送的。(1)总线接口部件BIU总线接口部件BIU具有下列主要功能:由20位地址加法器产生20位的物理地址;预取指令并存入先进先出的指令队列缓冲器中;从内存和I/O接口读/写操作数;发出各种总线控制信号,等等。它由下列各部分组成:①4个16位段寄存器数据段寄存器(DataSegment,DS)代码段寄存器(CodeSegment,CS)附加段寄存器(ExtraSegment,ES)堆栈段寄存器(StackSegment,SS)⑤总线控制电路,用于控制总线的开放、关闭及信号的传送方向等。②16位指令指针IP(InstructionPointer):专用于存放下一条将要执行指令的偏移地址。③20位地址加法器:它能将16位逻辑地址变换成读/写存储器所需要的20位物理地址。实际上由它完成20位地址的加法操作。④6字节指令队列缓冲器,用于预存放6字节的指令代码。(2)指令执行部件EU指令执行部件EU的功能是进行指令译码和执行指令,并向BIU提出访问存储器或I/O接口的请求。它由以下几个部件组成:①算术逻辑部件ALU(ArithmeticLogicUnit)②标志寄存器FLAGS(又称为程序状态字PSW),用于存放ALU运算结果的标志等。③寄存器组:8个通用的16位寄存器、堆栈指针SP和基址指针BP。④执行部件控制电路2.8086CPU内部寄存器结构8086CPU内部寄存器结构在计算机中起了重要的作用,寄存器是微处理器中的重要组成之一,它的存取速度比内存快很多,因此,在程序执行的过程中,寄存器可用来存放运算过程中所需要的操作数、操作数地址和中间结果等。8086CPU内包含4组16位寄存器。它们分别是通用寄存器组、段寄存器、指令指针寄存器及标志位寄存器。(1)通用寄存器组通用寄存器组包括8个16位的通用寄存器,它们是AX,BX,CX,DX,SP,BP,SI和DI,其中4个寄存器AX,BX,CX和DX又称为数据寄存器,它们可以存放16位数据或地址,也可以分为两个8位的寄存器使用,当作为8位寄存器使用时,高8位寄存器的名称为AH、BH、CH和DH,低8位则为AL、BL、CL和DL。SP,BP,SI和DI这4个通用寄存器只能用作16位寄存器,通常用于存储器寻址时提供偏移地址,也可以用作数据寄存器。每个寄存器还有它们各自的专用场合,其中:AX称为累加器,使用最频繁,用于算术运算、逻辑运算以及在输入输出指令中作数据寄存器使用等;BX称为基址寄存器,在间接寻址中作基址寄存器,常用作偏移地址访问数据段;CX称为计数寄存器,作为循环和串行操作等指令中的隐含计数器;DX称为数据寄存器,常用来存放双字长数据的高16位或存放外设端口的地址。源变址寄存器SI(SourceIndex)和目的变址寄存器DI(DestinationIndex),通常与DS数据段寄存器一起使用,用来确定数据段中某一存储单元的地址。在进行字符串操作时,SI用于存放源操作数的偏移地址,DI用于存放目的操作数的偏移地址,SI与DS联用,DI与ES联用,分别寻址数据段和附加数据段。SP,BP,SI和DI这4个通用寄存器通常用于存储器寻址时提供偏移地址,也可以用作数据寄存器。SP称为堆栈指针(StackPointer),或称堆栈指示器,必须与SS堆栈段寄存器联用。SP用于指示栈底或栈顶的偏移地址。BP称为基址指针(BasePointer),常用作偏移地址访问堆栈段。AHALBHBLCHCLDHDLSPBPSIDIIPFLAGSAXBXCXDX堆栈指针寄存器基址指针寄存器源变址寄存器目变址寄存器指令指针标志寄存器通用寄存器数据寄存器图2-38086CPU内部寄存器CSDSSSES代码段寄存器堆栈段寄存器数据段寄存器附加段寄存器15870(2)段寄存器8086CPU内部设有4个16位段寄存器,这些段寄存器的内容与段内偏移地址组合形成20位物理地址。代码段寄存器CS:代码段是一个随机存取存储区,用来保存微处理器使用的程序代码。在8086系统中,代码段寄存器CS定义了代码段的起始地址。代码段的最大存储空间为64KB。数据段寄存器DS:数据段也是一个随机存取存储区,用来保存程序执行过程中所使用的数据及存放程序运行后的结果。数据段寄存器DS定义了数据段的起始地址,其最大存储空间也是64KB。附加段寄存器ES:附加段是为某些串操作指令存放操作数而附加的一个数据段。与数据段类似,附加段寄存器ES定义了附加段的起始地址,其最大存储空间也为64KB。堆栈段寄存器SS:堆栈段是一个特殊的随机存取存储区,用来临时保存程序执行过程中有关寄存器的内容、程序的地址信息及传递参数等。堆栈段寄存器SS与堆栈指针SP共同确定堆栈段内的存取地址。其最大存储空间为64KB。(3)指令指针IP8086CPU中设置了一个16位指令指针IP,IP用来存放将要执行的下一条指令在当前代码段中的偏移地址,它与代码段寄存器CS联用,以确定下一条指令的物理地址,8086CPU利用CS:IP取得下一条要执行的指令的物理地址。例【2-1】设存放在CS中的当前代码段基地址值是3000H,IP指令指针存放下一条要执行指令的段内偏移地址是1234H,组合后生成的20位物理地址PA=3000H×16+1234H=31234H(4)标志寄存器标志寄存器(FLAGS)用于反映部分指令(例算术运算及逻辑运算指令)执行结果的状态,常用作后续条件转移指令的转移控制条件。标志寄存器为16位,实际使用了其中的9位,所用各位的含义如图2-4所示。图2-4标志寄存器FLAGSOF1115141312DF10IF9TF8SF7ZF65AF43PF21CF0标志的分类根据功能,将9个标志位分成两类:一类为状态标志,表示运算后的状态特征,它影响后面的操作。状态标志有6位:CF、PF、AF、ZF、SF和OF;另一类为控制标志,用来控制CPU的操作,控制标志有3位:TF、IF和DF。标志位①CF(CarryFlag),进位标志位。本次运算中最高位有进位或借位时,CF=1,否则CF=0。例:25H+6EH=93H没有进位,则CF=0D7H+5CH=(1)33H有进位,则CF=1②PF(ParityFlag),奇偶校验标志位。本次运算结果的低8位中1的个数为偶数时,PF=1,否则PF=0。③AF(AuxiliaryCarryFlag),辅助进位标志位。本次运算结果低4位向高4位有进位或借位时,AF=1,否则AF=0。通常用于对BCD算术运算结果的调整。标志位标志位④ZF(ZeroFlag),零标志位。若运算结果为0时,ZF=1,否则,ZF=0。⑤SF(SignFlag),符号标志位。当运算结果的最高位为1,则SF=1,否则SF=0,即与运算结果的最高位相同。⑥OF(OverflowFlag),溢出标志位。溢出的判断方法如下:加法运算:若两个加数的最高位为0,而和的最高位为1,则产生上溢出;若两个加数的最高位为1,而和的最高位为0,则产生下溢出;当两个加数的最高位不相同时,不可能产生溢出。减法运算:若被减数的最高位为0,减数的最高位为1,而差的最高位为1,则产生上溢出;若被减数的最高位为1,减数的最高位为0,而差的最高位为0,则产生下溢出;被减数及减数的最高位相同时,不可能产生溢出。标志位溢出是指补码运算的结果超出了所选字长能表示数的范围。例如,8位补码所能表示数的范围是-128~+127,16位补码所能表示数的范围是-32768~+32767。如果运算结果超出这个范围,就产生了溢出。什么是溢出例【2-2】请指出执行了下列加法操作后各标志位的状态。1010010000111001+01000101011010101110100110100011执行以上操作后,各状态标志位的状态应为:CF=AF=PF=ZF=SF=OF=011010标志位⑦TF(TrapFlag),陷井标志位,也常称为单步标志位。调试程序时,设置TF=1时,8086CPU每执行完一条指令就自动产生一个内部中断。⑧IF(InterruptFlag),中断允许标志位。该标志用于控制外部可屏蔽中断是否可以被8086CPU响应。IF=1,允许CPU响应可屏蔽中断请求;IF=0,则禁止CPU接收外部可屏蔽中断请求。⑨DF(DirectionFlag),方向标志位。用于控制串操作指令中地址指针的变化方向。如果设置DF=0,每次串操作后的存储器地址就自动增加,若DF=1,每次串操作后的存储器地址就自动减少。标志位名置位符号(=1)复位符号(=0)溢出标志OFOVNV方向标志DFDNUP中断标志IFEIDI符号标志SFNGPL零标志ZFZRNZ辅助标志AFACNA奇偶标志PFPEPO进位标志CFCYNC表2-1Flags中标志位的符号表示在调试程序DEBUG中,提供了测试标志位的表示方法,它用符号来表示标志位的值,表2-1给出了各个标志位在DEBUG中的符号表示(TF在DEBUG中不提供符号)。2.2.232位微处理器的编程结构图2-5给出了32位微处理器的寄存器模型,它实际上是一个呈现在编程人员面前的寄存器集合,称之为32位微处理器的编程结构。它描述了80386、80486及Pentium系列微处理器内部
本文标题:第2章-微处理器的编程结构.
链接地址:https://www.777doc.com/doc-4362126 .html