1、1,第二章 微型处理器与单片机,第1节 CPU的内部逻辑结构第2节 CPU的外部结构第3节 8086支持的存储器结构第4节 8086系统配置第5节 CPU的操作和时序,2,第1节 CPU的内部逻辑结构,一、CPU的组成和功能1、CPU的组成 CPU主要由运算器、控制器、寄存器组和片内总线等组成2、CPU的功能(1) 指令控制 (2) 操作控制(3) 时序控制 (4) 执行指令(5) 数据加工(运算),3,二、8086/8088微处理器的内部结构,8086是16位的微处理器,有16位数据线和20位地址线,可寻址220即1MB。8088是准16位微处理器,内部为16位,外部数据线为8位。8086主
2、要分为两个独立的功能模块,总线接口模块(BIU)和执行部件(EU),它们可以并行工作。如图2.1所示。,4,5,1、总线接口部件BIU,总线接口部件负责与存储器、输入/输出端口传送数据。 总线接口部件组成: (1) 专用寄存器组:段地址寄存器CS、DS、ES、SS和指令指针寄存器IP,均为16位。 (2) 地址加法器:8086在寻址1M字节地址空间时需用20位地址,这个地址就是由地址加法器产生的。,6,具体的说,地址加法器将段寄存器(16位)的内容左移4位,然后与指令指针寄存器IP的内容相加得到20位的物理地址。 例如:从内存取指令时, (CS)5760H,(IP)=1234H,则物理地址为:
3、 57600H+ 1234H =57934H。 这里,先将段寄存器CS左移4位(16进制数只需后面加一个零)。,7,(3) 6字节的指令队列:总线接口部件从内存中取来的指令放在一个缓冲区中,这个缓冲区叫指令队列。执行部件在执行指令过程中从指令队列取来指令执行。 (4) 输入/输出控制电路:该控制电路将8086CPU的片内总线与系统总线相连,是8086CPU与外部交换数据的必经之路。,8,2、执行部件EU(Execution Unit),执行部件负责执行指令。通常,从指令队列中取得等待执行的指令。组成如下:(1)算术逻辑单元ALU:完成各种运算。(2)标志寄存器FR:用来保存ALU运算结果的一些
4、特征信息,如运算是否进位。(3)通用寄存器组:数据寄存器AX,BX,CX,DX和寄存器BP,SP,SI及DI,均16位。(4)执行部件控制电路,9,3、BIU和EU的管理,BIU和EU可以并行工作,提高CPU效率。(1)BIU监视着指令队列。当指令队列中有2个空字节时,就自动把指令取到队列中。(2)EU执行指令时,从指令队列头部取指令,然后执行。如需访问存储器,则EU向BIU发出请求,由BIU访问存储器。(3)在执行转移、调用、返回指令时,需改变队列中的指令,要等新指令装入队列中后,EU才继续执行指令。(4)当指令队列已满,而且执行部件对总线接口部件又没有总线访问请求时,总线接口部件便进入空闲
5、状态,10,4、寄存器结构(编程结构),(1)通用寄存器组8086CPU有8个16位的通用寄存器,分2组。通用数据寄存器:AX,BX,CX,DX,用来存放数据或地址;一个16位寄存器也可以当作两个8位寄存器用,此时表示为AH,AL,BH,BL,CH,CL,DH,DL。基地址寄存器BP,堆栈指针寄存器SP,源变址寄存器SI和目的变址寄存器DI主要存放地址,也可以存放数据。,11,(2)段寄存器四个段寄存器为CS(代码段寄存器)、DS (数据段寄存器)、ES (附加段寄存器)SS (堆栈段寄存器)。通过这 四个段寄存器,CPU可=以定位4个逻辑段, 分别为:当前代码段当前数据段当前附加段当前堆栈段
6、。,12,(3)指令指针寄存器IP 该寄存器的内容用来指明将要执行的下一条指令在代码段中的位置。总线接口部件BIU负责修改IP寄存器的值,使它始终指向将要执行的下一条指令。,13,(4)标志寄存器FR FR主要用来标志运算结果的状态,以及控制CPU的操作。各标志位定义如图2. 2所示(共有9个标志):,14,标志位共有9个,6个是状态标志,用来表示运算结果的特征,包括CF、PF、AF、ZF、SF和OF;3个是控制标志,用来控制CPU的操作,包括IF、DF和TF。CF:进位标志,表示本次运算中最高位(第7位或第15位)有进位或有借位。PF:奇偶标志。 PF=1表示本次运算中低8位有偶数个“1”;
7、 PF=0表示有奇数个“1”。AF:辅助进位标志。 AF=1表示本次运算第3位向第4位有进位或有借位。在十进制运算中作为是否进行十进制调整的依据。ZF:零标志。ZF=1表示本次运算结果为零,否则ZF=0SF:符号标志。 SF=0为正数; SF=1为负数。OF:溢出标志。 OF=1表示本次运算结果产生溢出,否则OF=0。所谓溢出就是指运算结果超出了相应类型数据所能表示的范围。,15,DF:方向标志,用来控制串操作指令的执行。 DF=0则串操作指令的地址自动增量;若DF=1,则自动减量。IF:中断标志,用来控制对可屏蔽中断的响应。IF=1, 则允许CPU响应可屏蔽中断;IF=0,则CPU不能响应可
8、屏蔽中断。TF:单步标志。若TF=1,则CPU进入单步工作方式,即CPU每执行一条指令就自动产生一次内部中断;TF=0, 则CPU正常执行。,16,5、8088与8086的区别,8088的指令队列只有4个字节,若出现1个空字节,BIU就会自动取指令补充。 8088 BIU与外部交换数据是8位的,I/O控制电路与专用寄存器之间的数据总线宽度也是8位的。,17,第二节 CPU的外部结构,8086/8088CPU芯片都是40条引脚的双列直插式封装。部分引脚采用了分时复用方式,即同一条引脚在不同的时刻具有不同的用途。如图2.3所示。8086/8088CPU可有两种工作模式,即最大模式和最小模式。不同模
9、式下个别引脚的功能是不同的。,18,8086与8088 CPU外观比较,19,一、8086引脚分类,(1) 公共引脚地址总线数据总线时钟信号中断信号就绪/等待信号(2) 模式选择引脚最小模式引脚最大模式引脚,20,最小模式和最大模式的概念,所谓最小模式,就是系统中只有8086或8088一个微处理器。最大模式是相对最小模式而言。最大模式用在中等规模的或者大型的80868088系统中。有外围总线控制器,21,(1)、公共引脚说明,地址总线数据总线时钟信号中断信号就绪/等待信号,22,地址总线,独立输出之高8位地址:A8A15,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,分时输
10、出的AD0AD7,通过锁存器产生低8位地址A0A7, Pin169,分时输出的A16/S319/S6,通过锁存器产生最高4位地址A16A19,共20根地址线,寻址空间为:2201M,23,数据总线,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,分时输出的AD0AD7,直接产生8位数据D0D7Pin169,共8根数据线,字长为:8位,24,时钟信号,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,时钟输入:CLK,Pin-19为8088提供基准,来自8284芯片,为4.77MHZ,不可屏蔽中断请求:NMI,输入,上升沿
11、触发。INT 2,Pin-17,CLK,NMI,不可屏蔽中断信号,25,可屏蔽中断,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,可屏蔽中断请求:INTR,输入,高电平触发。Pin-18中断允许标志可屏蔽中断请求。总线周期的最后一个时钟周期检测INTR。可以通过8259扩充中断源。,CLK,NMI,INTR,26,就绪与等待,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,READY信号用来与慢速存储器或外设进行速度匹配。T2时钟周期末检测到READY为低时,在总线周期的第3时钟周期插入一个等待周期Tw。如此每个T后
12、检测,重复插入Tw直到READY变高。,CLK,NMI,INTR,READY,CPU就绪信号:READY,输入,高电平有效。Pin-22,27,等待测试,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,TEST信号与WAIT指令联合使用。CPU每5个时钟时钟周期检测一次TEST信号,如高,继续执行WAIT,否则,跳过WAIT指令,执行后续指令。可用来支持实现多CPU协同工作。,CLK,NMI,INTR,READY,CPU测试信号:TEST,输入,低电平有效。Pin-23,TEST,28,2、模式选择信号,8086的有两种组态模式 1.两种组态分别为:最小组
13、态(模式)和最大组态(模式)2.两种组态的区别:(1)8086引脚MN/ MX=1时,8086工作在最小组态. MN/ MX=0时,8086工作在最大组态.(2)最小组态时,系统中只有一个8086 CPU工作,所有总线控制信号均有8086产生,总线控制逻辑被减小到最小;(3)最大组态时, 8086提供一组信号,以组成多处理器/协处理器微机系统。即在一个系统中有两个或两个以上的微处理器,每个处理器能执行它自己的程序。 另外,系统中增加了总线控制器8288,许多总线控制信号由8288产生.,29,模式选择,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,可用来
14、选择最大模式或最小模式工作。最大模式:存储器与IO读写信号由总线控制器产生,要较多外围芯片。最小模式:存储器与I/O读写信号由CPU直接提供,外围芯片较少。,CLK,NMI,INTR,READY,TEST,MIN/MAX,30,3、最小模式信号,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,RD:输出,三态。存储器与IO 读信号,CPU自动产生。DMA时浮空。Pin-32WR:输出,三态。存储器与IO写信号。由CPU产生。Pin-29IO/M:存储器与IO读写选择。 Pin-28,CLK,NMI,INTR,READY,TEST,MIN/MAX,最小模式的
15、读写信号:,31,最小模式信号2,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,DT/R:数据传输方向,输出,三态。高,发送;低,接受。Pin-27DEN:输出,三态。有效即低时,表示DB上的数据有效,用作总线驱动。Pin-26ALE:输出,三态。分离AD0AD7上的地址信号。Pin-25,CLK,NMI,INTR,READY,TEST,MIN/MAX,最小模式的控制信号:,DT/RDENALE,32,最小模式信号3,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,INTA:中断应答,输出,低有效。Pin-24HOL
16、D:输入,高有效。DMA请求。Pin-31HLDA:输出,高有效,DMA应答。 Pin-30,CLK,NMI,INTR,READY,TEST,MIN/MAX,最小模式的控制信号:,HOLD,33,最小模式总线周期状态选择,34,4、最大模式信号,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,S0S2:总线周期状态标志。Pin 26,27,28经过S0S2译码产生存储器与I/O读写信号,CLK,NMI,INTR,READY,TEST,MIN/MAX,HOLD,S2S1S0,35,最大模式信号2,Intel8088,A8,A14,A15,AD0,AD7,A1
17、6/S3,A19/S6,QS0QS1:指令队列状态。Pin 24,25,CLK,NMI,INTR,READY,TEST,MIN/MAX,最的模式的控制信号:,HOLD,S2S1S0,QS0QS1,36,最大模式信号3,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,RQ/GT0RQ/GT1:总线请求允许。Pin 31,30LOCK:总线锁存信号。低有效。Pin 29,CLK,NMI,INTR,READY,TEST,MIN/MAX,最的模式的总线控制信号:,HOLD,S2S1S0,QS0QS1,RQ/FT0RQGT1LOCK,37,S3S4:指示使用的段寄存
18、器,最大模式信号3,Intel8088,A8,A14,A15,AD0,AD7,A16/S3,A19/S6,CLK,NMI,INTR,READY,TEST,MIN/MAX,HOLD,S2S1S0,QS0QS1,RQ/FT0RQGT1LOCK,S3S4,S5用来表示中断标志状态线,当IF为1时,S5=1。 S6保持恒为0。,38,:总线高位有效信号,39,8086微处理器信号一览,1.AD15-AD0:分时复用的地址/数据总线2.A19/S6-A16/S3:分时复用的地址/状态线3. BHE :总线高位有效信号4. :读信号,低有效5. :写信号,低有效6. :存储器或I/O端口访问信号,低I/O
19、,高MEM,与,MEMR,与,MEMW,40,7.Ready:准备就绪信号8.INTR:中断请求信号9. :中断响应信号10.NMI:非屏蔽中断请求信号11. :测试信号12.RESET:复位信号13.ALE:地址锁存允许信号14. :数据发送/接收控制信号15. :数据允许信号,41,16.HOLD:总线请求信号17.HLDA:总线请求响应信号18. :工作模式选择信号19.CLK:主时钟信号20.Vcc:CPU+5V电源21.GND:电源地最大模式系统时2431引脚重定义如下:22 :总线周期状态信号23. :封锁信号24. :请求/同意信号25.QS1,QS0:指令队列状态信号,42,第
20、3节 8086支持的存储器结构,8086CPU有20根地址线,直接寻址内存空间为220=1M字节,按(00000H-FFFFFH)编址。直接寻址外设空间为216=64K字节,按(0000H-FFFFH)编址。8086 CPU连接的1M字节存储器的空间实际上分成两个512KB的存储体,偶体与CPU的D0D7相连奇体与CPU的D8D15相连。A0和/BHE信号用于选择两体(之一或两者)。如下页:,43,图2.4 存储体与总线的连接,44,在访问一个字节时,无论给出的是偶地址还是奇地址,都只需要一个总线周期就可以完成。在访问一个字时,偶起始地址一个总线周期,奇起始地址两个总线周期。,MOV AL,0
21、080H,MOV AL,0081H,MOV AX, 0080H,MOV AX, 0081H,访问奇起始地址需要两个总线周期,45,第4节 系统配置,系统配置的目的是形成存储器和输入/输出接口的公共总线,方便外设和存储器与微处理器的连接。8086/8088在最小模式与最大模式下的系统配置有较大区别,以下以8086为例分别介绍在两种工作模式下的系统配置的典型方法。由MN/MX信号控制。高小、低大。,46,1、最小模式的系统配置,在最小模式下,存储器和外设的地址、数据与控制信号由微处理器8086自行产生,通过三片地址锁存器74LS373(或Intel 8282)和两片总线收发器74LS245(或In
22、tel8286)形成外设和存储器的总线信号。图中8284A作为时钟发生器使用,为8086通过精确时钟。,8282,8286,或373,或245,47,8282、8286或373、245,373,245,48,最小模式的地址与数据分离方法,8088,锁存器(74LS373),AD0|AD7ALE,A0A7,D0D7,ALE,49,最小模式的数据驱动方法,245,50,最小模式读写电路构成方法,M/IO,逻辑电路,存储器读存储器写输入输出写输入输出读,51,2、最大模式系统,最大模式与最小模式的主要区别在于使用了总线控制器8288来产生地址锁存器、总线收发器和访问存储器、I/O接口所需要的全部控制
23、信号。在最大模式中,系统通常有两个或多个微处理器,设置总线控制器便于这些微处理器相互协调和共享控制。有关8288可以参考书上的内容,不作要求。,52,2、最大模式系统,53,8288总线发生器结构,状态译码器,命令信号发生器,控制信号发生器,控制逻辑,54,8288总线发生器的输出,55,XT BUS 形成电路,ALE,56,第5节 CPU的操作和时序,一、基本概念1、时钟周期:是CPU的基本时间计量单位,它由计算机主频决定。8086主频是4.77MHz,一个时钟周期就是210ns。2、总线周期:BIU完成一次访问存储器操作所需要的时间称作一个总线周期。一个最基本的总线周期由4个时钟周期组成,
24、习惯上称4个状态,T1,T2,T3,T4状态。只有在CPU和内存或I/O端口之间传递数据以及取指令时,CPU才执行总线周期。,57,3、空闲周期:如果在一个总线周期之后,不立即执行下一个总线周期,则系统总线就处于空闲状态,此时执行空闲周期Ti。4、指令周期:就是计算机完成对一条指令的读取并执行这一系列步骤所需要的时间。指令周期包含一个或几个总线周期。 例如,执行一条8位寄存器乘法(MUL),这是一条两字节指令,需7077个时钟周期的执行时间。,58,总线操作序列,机器周期,指令周期,总线周期,59,时钟周期,在T1状态,CPU往多路复用总线上发出地址信息,以指出要寻址的存储单元或外设端口的地址
25、。在T2状态,CPU从总线上撤消地址,而使总线的低16位浮置成高阻状态,为传输数据作准备。总线的最高4位(Al9一A16)用来输出本总线周期状态信息。这些状态信息用来表示中断允许状态、当前正在使用的段寄存器名等。在T3状态,多路总线的高4位继续提供状态信息,而多路总线的低16位(8088则为低8位)上出现由CPU写出的数据或者CPU从存储器或端口读入的数据。,60,二、系统的复位与启动操作,复位与启动是在RESET引脚上至少维持4个时钟周期的高电平,时序如图2.11所示。,图 2. 11 8086/8088的复位时序,61,复位时各内部寄存器的值:标志寄存器FR 清零指令指针IP 0000HC
26、S寄存器 FFFFHDS寄存器 0000HSS寄存器 0000HES寄存器 0000H指令队列 空其他寄存器 0000H,62,三、最小模式系统中的总线操作,8086CPU为了要与存储器或I/O端口交换数据,需要执行一个总线周期,这就是总线操作。总线操作可以分为总线读操作和总线写操作。读操作是CPU从存储器或I/O端口读取数据,写操作是CPU将数据写入存储器或I/O端口。,63,最小模式系统中的总线读操作如图2. 12所示。,图 2.12 最小模式下的读操作时序,64,存储器读指令与存储器读时序的关系MOV AX,0000HMOV DS,AXMOV AL,8000H;读,1)ALE变高,将00
27、00: 8000H放到AD0AD19信号线上;译码器对其译码产生存储器选择信号,2)发出M / IO信号(高),发出RD信号为低3)被选择的存储器将数据放到AD0AD7信号线,4)CPU在RD上升沿将AD0AD7信号线的数据读入CPU内部AL寄存器。,1,2,2,3,4,1,65,最小模式系统中的总线写操作如图2. 13所示。,图 2.13 8086最小模式写操作时序,66,四、最大模式系统中的总线操作,图 2.14 8086最大模式的读操作时序,67,最大模式系统中的总线写操作,68,最小模式下的总线保持(了解),在DMA控制器8237部分解释,69,中断响应周期,70,指令与时序的关系,二
28、、外设接口指令与I/O读写时序的关系MOV DX,0220HIN AL,DX;读I/O接口,时序上执行四个动作:(1)将0200H放到AD0AD19信号线上;译码器对其译码产生外设选择信号(2)发出M/IO信号(低),发出RD信号为低(3)被选择的外设将数据放到AD0AD7信号线(4)CPU在RD上升沿将AD0AD7信号线的数据读入CPU内部AL寄存器,71,指令与时序的关系,AB,译码器,锁存器,存储器接口或外设接口,DB,CPU,0200H,M/IO,RD,A,72,指令执行与信号的关系,针对上页图,运行如下程序,A点的信号如何变化?(思考)MOV DX,200HMOV AL,00HREP
29、T:OUT DX,AL DEC AL JMP REPT,73,作业题(下周四交,单号),P90-91第1次作业:2、8、11、16;第2次作业:19、21,74,2.2 80386微处理器,西安交通大学计算机系桂小林2011年2月26日,75,目录,2.2 80386微处理器2.3 双核微处理器2.4 80x8寻址方式2.5 80x86的指令系统2.6单片计算机,76,2.2 80386微处理器,1985年10月推出了高性能的32位微处理器80386,具有32位数据总线和32位地址总线,直接寻址能力为4GB,在16MHz主频下每秒可执行4106条指令。它采用了流水线和指令重叠执行技术、虚拟存储
30、技术和存储管理技术等,这些技术以后被广泛采用,故80386是微处理器发展史上的一个里程碑。,77,2.2.1 80386的组织结构,80386的内部结构可以划分为:指令预取部件、指令译码部件、指令执行部件、分段部件、分页部件和总线接口部件等6个功能部件,78,2.2.1 80386的组织结构,指令预取部件IPU(Instruction Prefetch Unit)IPU中设置了一个16字节的指令队列,只要指令队列有空字节,IPU就向总线接口部件提出请求,若总线接口部件处于空闲状态,则从存储器中取出指令装入指令队列。指令译码部件IDU(Instruction Decode Unit)IDU的作用
31、就是对指令操作码进行译码,实现从指令到微指令的转换。IDU中设置了译码指令队列,译码得到的微指令存放在该队列中。指令执行部件EU(Execute Unit)EU包括算术逻辑运算部件ALU、8个32位通用寄存器和1个64位桶形移位寄存器和1个乘/除法器,其功能就是完成各种数据运算和处理。此外,EU还包括保护测试部件,用于检验指令执行过程中是否符合存储器分段规则。上述三个部件IPU、IDU和EU合称为中央处理部件CPU(Central Processing Unit),它们实际构成了一个指令流水线。,79,2.2.1 80386的组织结构,分段部件SU(Segmentation Unit)8038
32、6采用了分段、分页两级存储管理机制,存储器首先以段为单位进行划分,每个段的长度最大为4GB,每个段又进一步划分为多个页面,页面长度固定为4KB。分页部件PU(Paging Unit)PU的作用是将SU生成的线性地址转换为存储器的物理地址,这种转换是通过两级页表来实现的。PU是80386的可选部件,若不使用PU,则SU生成的线性地址就是物理地址。SU和PU合称为存储管理部件MMU(Memory Management Unit)。总线接口部件BIU(Bus Interface Unit)BIU是80386与外部之间的高速接口。当指令预取部件取指令,或者指令执行部件读写操作数和运算结果时,都会向BI
33、U提出访问存储器和I/O设备的请求,BIU根据一定的优先级来响应这些请求,产生所需要的地址信号和读写控制信号,以完成有关操作。此外,BIU也实现了80386与其它协处理器之间的控制功能。SU、PU和BIU实际上也构成一条地址流水线,,80,2.2.2 80386的编程结构,80386有6类寄存器,分别是通用寄存器、指令指针寄存器、标志寄存器、控制寄存器、调试与测试寄存器、段寄存器、段描述符寄存器、系统地址寄存器。(1)通用寄存器(下页图示)80386有8个32位的通用寄存器,分别是EAX、EBX、ECX和EDX,以及ESP、EBP、ESI和EDI, (2)标志寄存器/标志寄存器32位的标志寄存
34、器EFLAGS也是由16位的标志寄存器FLAGS扩展而来的。原有的9个标志含义相同,在此基础上又增加了4个新的标志。,81,(2)标志寄存器/标志寄存器32位的标志寄存器EIP用于存放下一条指令的偏移量,当兼容8086时,其低16位就是IP寄存器。,82,(3)80386有4个32位的控制寄存器CR0、CR1、CR2和CR3,其中CR1未使用。这些控制寄存器主要用于对80386各种功能和运行方式的控制。(4)调试寄存器/测试寄存器80386设置了8个32位的调试寄存器DR0 DR7,其中DR4 DR5为Intel公司保留,而其它6个寄存器用于设置断点和调试功能。80386使用了两个测试寄存器T
35、R6和TR7,用于测试TLB(Translation Lookaside Buffer)。其中TR6存放测试控制命令,而TR7存放测试所得数据。,83,(5)系统地址寄存器系统地址寄存器包括全局描述符表寄存器GDTR、中断描述符表寄存器IDTR、局部描述符表寄存器LDTR和任务状态段寄存器TR。设置这些寄存器的目的是为了便于对各个描述符表进行访问,它们分别保存着对应描述符表的存储地址。系统地址寄存器的内容和作用在后续章节详细介绍。(6)段寄存器和段选择子80386与8086一样,段寄存器也是16位的,但增加了两个附加数据段寄存器FS和GS。在实地址方式中,80386物理地址的计算与8086相同
36、。但在保护方式下,段寄存器的作用则不同,其内容和作用在后续章节详细介绍。,84,2.2.3 80386的工作方式,实地址方式(Real Address Mode)8086兼容方式(段), 80386复位后就进入实地址方式 保护方式(Protected Virtual Address Mode)段页式虚拟8086方式(Virtual 8086 Mode)段页式 (386下执行86代码,某个任务),85,80386的工作方式,实地址方式(Real Address Mode)8086工作模式,只采用分段方式,每段固定长度为64KB,20位物理地址由段寄存器内容左移4位后与偏移量相加得到。不同之处是8
37、0386可以进行32位数据的运算和处理。复位后进入实地址方式,保护方式(Protected Virtual Address Mode)80386在保护方式下采用了段页式的存储管理机制,提供保护机制,支持虚拟存储和多任务操作系统。保护方式是80386最常用的方式。虚拟8086方式(Virtual 8086 Mode)80386在虚拟8086方式同样采用段页式存储管理机制,具有护功能,可以支持多任务。虚拟8086方式是针对多个任务中的某一个任务而言的,也就是说在多个任务中,某一个任务是在虚拟8086方式,而另一些任务可以在保护方式。当一个任务工作在虚拟8086方式时,可以直接执行8086的代码。,
38、86,2.2.4 80386的引脚和时序,80386采用132条引脚的PGA(陶瓷网格阵列)封装, 主要包括:(1)数据总线D31 D0(2)地址总线A31 A2、/BH3/BH0(3)时钟信号CLK2,(4)与总线周期有关信号:,87,80386时序,修订:BE3-BH3,88,2.2.5 80386的存储管理,图2.19给出了80386的存储管理机制的实现原理。用户程序在访问存储器时给出的是48位虚拟地址(或称为逻辑地址),由16位的段选择子(Segment Selector)和32位偏移量两部分组成,段选择子由段寄存器给出,而偏移量则根据不同的寻址方式得到。,89,1、基本概念与术语,(
39、1)虚拟存储器和高速缓冲存储器 (2)描述符描述符又称为段描述符,由8个字节构成,用于对程序段进行描述,向CPU提供虚拟地址并向实地址转换所需的数据;包括段的基地址、段的大小和段的属性(称访问权字段)。图2.21说明了段描述符的格式。,90, 32位段基址:指明一个段的起始位置,可以为32位的线性地址空间中的任一地址。 20位段限:段限决定了一个段的可寻址范围,目的是为了判断对存储段的访问是否越界,以免破坏其它信息。386的段限长是32位,但在段描述符中只规定了20位,根据此20位限长及段属性中的G位计算出真正的段限长。在不使用分页机制时(G =0),则长度单位为字节,段的最大长度为1B220
40、=1MB;在启用分页机制时(G =1),则长度单位是页面数(每页4KB),因此段的最大长度为4KB220=4GB。例如,G=1时的段基址00000000H,限长0FFFFFH,则真实的段限长0FFFFFH*1000H+0FFFH0FFFFFFFFH。,91, 段的属性包括以下字段A访问位,A = 1表示已经访问过该段,操作系统利用该位统计段的使用情况。S描述符类型位,若S = 1,则为非系统描述符,所描述的段是代码段、数据段(包括堆栈段);若S = 0,则为系统描述符,所描述的是局部描述符表、任务状态段和各种门。TYPE段类型,用于说明对应的段的类型,包括是否为可执行的代码段、存储地址增长的方
41、向、该段是否可以进行写操作等。DPL描述符的特权级(Descriptor Privilege level),用于特权检查,以决定对该段能否访问。P存在位,当P = 1时,说明对应的存储段已经装入内存。D操作数长度标志,仅用于代码段描述符,当D = 1时,说明对应的代码段的代码是32位的,而当D = 0则为16位。,92,(3)描述符表,系统中有三类描述符表:全局描述符表GDT、局部描述符表LDT和中断措述符表IDT。这些表都是可变长度的存储器数组,表的长度从8B64KB之间,每个表最多可容纳8192个描述符(每个描述符由8B组成)。中断描述符表IDT存放的是描述中断服务程序入口地址等有关属性的
42、门描述符,包括中断门、陷阱门和任务门。每个任务有且只有一个独立的局部描述符表LDT,整个系统只有一个全局描述符表GDT,,93,(4)系统地址寄存器,系统地址寄存器包括:全局描述符表寄存器GDTR、中断描述符表寄存器IDTR、局部描述符表寄存器LDTR和任务状态段寄存器TR。,94,系统地址寄存器,80位的LDTR分为两个字段,高16位称为LDT选择子,用于在GDT中查找LDT描述符,一旦查找到LDT描述符,则由硬件自动存放在低64位中。,95,段寄存器和段选择子,段寄存器选择子16位(用户可见)描述符64位(用户不可见),96,段寄存器和段选择子,高13位存放的是段选择子,也就是段描述符在G
43、DT或LDT中的索引号。表索引标志TI:当TI = 1时,在LDT中查找,而当TI = 0时,则在GDT中进行查找。,另外2位RPL,用来作描述请求特权级(Requested Privilege Level),用于特权检查。,97,LDTR描述符获取过程,在访问LDT之前,首先需要在GDT中查找到该LDT描述符。通过LDTR的选择子查找GDT获得LDT描述符的过程如下图所示。,Index,98,80386特权级,80386中共规定有4个特权级,由0到3。0级别权限最高,3级最小。操作系统核心运行在0级,80386处理器共设置4个优先级(0级3级)。0级是最高级(特权级);3级是最低级(用户级)
44、;1级和2级介于它们之间。特权级代码一般是操作系统的代码,可以访问全部系统资源;其他级别的代码一般是用户程序,可以访问的资源受到限制。,99,2特权保护,80386采用保护机制主要为了检查和防止低级别代码的越权操作,如访问不该访问的数据、端口以及调用高优先级的代码等。80386中的每个段描述符号中都有DPL字段,高于该特权级别的程序才有权访问它。段寄存器的请求特权级(RPL):用于特权检查。检查主要是让当前优先级(CPL)和DPL比大小,如果大于等于才允许访问。 而RPL和CPL之间不作判断,将RPL和CPL中特权更高的那个和被访问段的DPL比较作判断。,100,3虚拟地址到线性地址的转换,虚
45、拟地址通常由两部分组成:段选择器和偏移地址。段选择器用来选择一个段,偏移地址用来指出操作数在所选择的段中的偏移量。例如: MOV FS: IOTA,AL 该指令中IOTA用来指定偏移地址。该指令的功能是:将寄存器AL的内容存入FS的选择器字段所选择的段中偏移量为IOTA的虚拟地址单元中。例如: MOV EAX,DS: EBX 该指令的功能是:将DS的选择器字段所选择的段中由EBX内容代表的偏移量所确定的虚拟地址单元开始的4个字节的内容送人EAX。,101,转换过程,CPU只要将段选择器所指向的段描述符中的32位基地址与32位偏移地址相加即可得到线性地址。将32位虚拟地址转换到32位线性地址的过
46、程包括:首先,CPU将逻辑地址中的段选择子装入段寄存器中;其次,硬件根据选择子的TI字段自动访问局部描述符表LDT或全局描述符表GDT; 然后,获取LDT或GDT中的描述符,进行段限比较;最后,根据描述符的基地址和程序给出的偏移地址,计算得到线性地址。,102,转换实例,例如,80386的某指令给出的32位逻辑地址为0000 0000 0110 0100,0000 0001 0000 0000B,则根据图2.26所示的结构,可以实现逻辑地址到线性地址的变换。具体过程如下:,103,转换实例,首先,32位逻辑地址的高16位装入段寄存器。根据图2.24的结构,得到的段寄存器的高13位为0000 0
47、000 0110 0B(00CH),TI=1B,RPL=00B,偏移地址为0100H。,104,转换实例,然后,硬件根据选择子的TI字段自动访问局部描述符表LDT,把段选择子的索引值000CH乘8以后的值0060H与全局描述符寄存器(GDTR)的段限00FF进行比较,由于该值没有超出界限,因此,可以对局部描述符表进行访问。,105,转换实例,其次,把0060H与局部描述符表的基地址(在LDTR中)相加得到访问数据段描述符的绝对地址00100060H。如果保护机构对访问权检查通过,CPU就自动地把地址为00100060H的数据段描述符(包括数据段基地址、段限和访问权字段)装入DS寄存器相应的段描述符寄存器高速缓冲器中。,