微机的接口技术

微机接口技术是采用硬件和软件相结合的方法,研究微处理器如何与“外部世界”进行最佳联结,以实现CPU与“外部世界”之间的高效可靠的信息交换的一门技术。(这里所说的“外部世界”是指除CPU以外的所有设备和电路)

 

微机接口技术包括信息类的多种技术(计算机技术、通信技术、电子技术、控制技术等)和计算机技术的多门课程(计算机组成原理、微机原理、程序设计语言、设备驱动程序及操作系统)知识的应用。

 

接口技术的内容可分为:上层(用户层)和接口的底层两个层次。

上层的负责的是接口用户应用程序的编写,包括MS-DOS和Win32程序两种形式的上层用户应用程序。

底层则是用户不可见的接口部分,其基本内容是本地总线与PCI总线之间的总线接口设计和为实现上层用户应用程序对底层硬件访问的设备驱动程序的设计,包括虚拟设备驱动程序(VDD)和内核设备驱动程序(WDM)程序的设计,而设备驱动程序又会牵涉到windows操作系统的内核;还包括实现PCI设备的即插即用而对配置空间的设置与访问。

 

 

先来看看下面的图片:

在图中很明显:微处理器采用的是以PCI总线为中心的多总线结构,I/O设备接口的一侧是与本地总线想连接,另外一次是与低速I/O设备相连,而高速I/O设备则直接与PCI总线相连。与低速I/O设备相似,扩展存储器通过扩展存储器的接口与本地总线相连,而主存储器则直接与Host桥相连

图中已经明确说明了:I/O设备接口和存储器等都是挂在微机的总线上,并且按照高速和低速分别连接在3级不同层次的总线上,都不是直接与CPU相连接的,而是通过各个关卡逐步靠近CPU。

 

值得注意的是,I/O设备接口是CPU与外设I/O设备之间的桥梁,所以I/O设备接口的发展自然要随着CPU和I/O设备之间的变化而变化。

 

I/O接口的设计主要是以硬件为基础,硬软结合的方法:

①硬件设计方法:

      通常采用可编程接口芯片并编写相应的控制程序,这要求对各种芯片的功能、特点、工作原理、使用方法及编程技巧,都要有深入了解和熟练的。

②软件设计的方法:

      软件的方法包括两种系统下的程序编写,即MS-DOS和windows系统下的4种编写。

  而在DOS下有3种方式: ⑴直接对硬件编程,这种方式可以充分发挥底层硬件的潜力和提高程序代码的效率,但是要求对硬件的细节有相当的了解,熟悉硬件的脾气。且程序对硬件的依赖性大,可移植性差。

                ⑵/⑶分别是BIOS调用和DOS系统功能调用编程。这两类主要针对的是标准的系统资源,包括键盘、显示器、打印机、串行口等的程序编写,而不需要对底层硬件编程。

  在windows下,⑷用户利用win32的API调用来编写。  

不难理解,且动动脑子就能想到:从应用角度了解硬件资源的外部特性和功能而不在意内部硬件细节的方法才是最佳的设计和分析的方法。

 

32位微处理器的工作模式有三种:实模式、保护模式、虚拟8086(V86模式)。

1.实模式

①存储器地址空间采用实地址,而不支持虚拟存储器。

②无保护机制,不支持存储器保护功能

③单任务运行,不支持多任务

④存储器管理采用分段机制,支持段式管理;不支持分页机制,不支持页式管理

⑤使用20位地址总线,支持1MB的内存空间寻址

 

在进入实模式后,微处理器的状态可以从相关的寄存器的内容看出来,先来看看下面的图片:

例如:

CRo的第0位 PE=0,表明微处理器工作在实模式下

         第3位 TS=0, 表明无任务转换,即不支持多任务

   第16位 WP=0,表明不进行写保护,不支持保护功能

   第31位 PG=0, 表明不使用分页式管理

IDTR的基地址=0和界限=3FFH,表示实模式的中断向量表安排在存储器的00000H~003FFH区域,并且固定不变。

 

实际上,实模式下的分段机制对存储器的段也是按照段描述符的格式定义的,只不过是根据实模式的特点进行的,并且所定义的段描述符中的各种属性是固定不变的。因此,不像保护模式那样,由于段的各种属性是变化的,而需要使用描述符来描述各个具体的段。

 

下面是实模式下对段描述符的定义,内容包括段基址、段界限和段属性3个域:

●代码段     段基地址 = 段值 x 16

                段界限 = OFFFFH(64KB)

                段属性: P = 1,  段总是存在(因为是实地址)

                         G = 0,  段界限以字节为单位

                      CPL = 0,  当前特权级为0(正在执行的代码段的访问特权级)

                         R = 1,可读可写

                           E = 0, 向上扩展,偏移值必须小于等于段界限

                           C = 0, 非一致代码段,访问特权级与被访问特权级恒等

●其他段     段基地址 = 段值 x 16

                段界限 = 0FFFFH(64KB)

                段属性: P = 1, 段总是存在 (因为是实地址)

                          G = 0, 段界限以字节为单位

                       CPL = 0, 当前特权级为0(段的被访问特权级)

                          R = 1, 可读可写

                          E = 0, 向上扩展,偏移值必须小于等于段界限

由于各个段的基地址、界限和属性都是按照上面固定的值由微处理器复位时就设置好了,所以,实模式下不再要求用段描述符来说明各个段的具体属性。

 

实模式下,用户在程序中所使用的地址是逻辑地址,而代码和数据放在物理地址中,CPU要运行程序就要将逻辑地址转换为物理地址。物理地址 = 段值 X 16 + 偏移量

在实模式下,存储器的寻址范围 220B=1MB ,一般情况下,各段在存储器中的位置分配是由操作系统负责的,除非专门指定。每个段可以独占1个段,段也可重叠。实际使用中,每个段的大小(尺寸)可以根据需要确定,可以使任意不超过64KB的范围,另外,段的起始位置必须从16的整数倍地址单元开始。

 

2.保护模式

保护模式的特点:

①采用虚拟技术,支持虚拟存储器

②采用保护措施,实现存储器内容的保护与隔离

③采用分段与分页机制,实现虚拟存储器的管理

④采用分段与分页机制,实现虚拟存储器管理

⑤基于虚拟机,支持多任务

 

在保护模式下,程序中所使用的地址是虚拟地址而不是实地址,存储器也是虚拟存储器。实际的物理存储器是由存储器芯片所组成的一个存储器实体,它的最大容量取决于地址总线的位数,20位地址有1MB空间,32位地址线可达4GB的空间。虚拟存储器是采用虚拟技术设计出来的一种比实际存储器容量大得多的,而并非实际存在的存储器。当然,虚拟存储器空间也不可能无限大,从32位微处理器段式管理方式的段+偏移可知,寻址目标地址最多46位(选择子14位,偏移量32位),可见32位处理器的虚拟地址空间可达246=64TB,这个空间比实际中的4GB大了16000倍。

 

实现虚拟存储的方法:

    首先,虚拟存储器由存储器管理器(MMU)及1个大容量硬盘(HD)支持。操作系统的存储器管理器控制物理存储器的分配和施放,以及硬盘和物理存储器之间的数据交换。当程序访问的一个段或页已在存储器(内存)时,操作正常;如果不在,就产生异常,并转入异常处理程序,异常处理程序则将该段或者页从硬盘装入内存。这样,在编程中看来所有段和页都是在存储器中,这就是虚拟存储技术。

 

保护模式下的保护机制

存储器的保护措施大致可分为特权级保护和条件保护两类

①特权级保护措施:

    是对各段人为的附加一个特权级别,并且规定低级别的程序不能访问,更不能修改高级别程序与数据。每当一个程序试图访问一个段时,就把它的特权级(CPL)与要访问的段的特权级(DPL)进行比较,以决定是否允许访问。从而实现保护的目的。

    特权级保护也叫访问权限保护,可分为两个层次:同一任务内的保护和不同任务之间的保护。

②条件保护性措施:

    是针对那些不够条件而进行的违规操作,用以包拯系统的安全。这类违规操作会引起异常,异常处理程序会处理他们并重启操作。

 

在保护模式下I/O地址空间也属于访问保护范围。但是端口地址与存储器地址不同,它既不是分段的,也不是分页的,故它的寻址不需要段寄存器,因而对存储器所采用的那些保护措施就不适用于I/O端口了。因此采用IOPL特权级与I/O许可位图进行保护。

 

保护模式下的存储器管理

在保护模式下,存储器空间用虚拟地址空间、线性地址空间和物理地址空间三种方式来描述。采用扩充的分段和可选的分页管理方式,并由CPU中的存储器不见MMU实现

 

 保护模式下存储器的管理方式

在保护模式下有两种存储器管理方式:即段式管理和页式管理。

  ①段式管理:

      段式管理将存储器空间划分为任意长度的段,并采用段+偏移量形成物理地址,在名称和形式上与16位微处理器相同,但是含义完全不同,它对段的描述已经添加了许多标志为保护的属性,而把“段”扩展为“段描述符”,因此,把保护模式下的段式管理称为扩展段式管理。

  ②页式管理:

      页式管理将存储空间划分为固定大小的页,并且采用页表将线性地址页转换为物理页,再将物理页+页内偏移量形成物理地址。

 

虚拟地址空间到物理地址空间的转换

 在保护模式下,用户在程序中使用的地址都是虚拟地址,而代码和数据是存放在物理地址中的,因此,微处理器要运行程序就要将虚拟地址转换(映射)到物理地址。

  ①段式管理的地址转换

     在段式管理下,仍然采用 段+偏移量的方案来表示,在形式上也是 段寄存器:偏移量 ,如代码段的虚拟地址CS:EIP。但是,这里的段寄存器里装的并不是真正的段基址,而是1个指向某段描述符的选择子,真正的段基址放在段描述符中。因此,要从虚拟地址转换(映射)物理地址,必须利用段选择子到描述符表中找到相应的描述符,从描述符中取出段基址,再把 段基地址+偏移量,最后得到物理地址(线性地址),(反过来,线性地址不一定是物理地址,只有在页式管理被禁止使用是,现行地址才等于物理地址)。

     之所以不直接把段基址放在段寄存器中,是因为在保护模式下,对段的描述除了段基址外,还加入了段的特权级属性和段限长等保护信息(64位的段描述符),使得16位的段寄存器不够存放这么多信息。

  ②页式管理的地址转换

    在页式管理下,存储器线性地址不等于物理地址,要得到物理地址还必须将线性地址再进行一次转换(映射)。为了实现这种转换,分页机制将32位存储空间划分为大小固定为4KB/4MB的物理页,并提供两级转换表:页表目录和页表。利用两级转换表建立线性地址和物理地址的对应关系。

    其中:

      线性地址的高10位(22~31位)对应页表目录项;

      线性地址的次高10位(12~21位)对应页表项;

      线性地址的低12位(0~11位)对应页内的偏移量;

即:

  要访问存储器单元。通过对两级转换表的页表目录项和页表项的两次查表,就可以产生与线性地址相对应的物理页,这叫做页变换。将也变换所得到的物理页加上线性地址低12位(0~11位)所确定的页内偏移量,就是要访问的存储单元。

    

3. 虚拟8086模式(V86模式)

 V86模式是在32位微处理器中模拟运行16位微处理器的一种工作模式,是在保护模式下由保护机制控制运行的8086工作模式。在V86模式下,段寄存器的用法跟实模式的一样,用来保存段起始地址的高16位;可寻址地址空间为1MB;20位的物理地址的计算也是段寄存器内左移4位加段内偏移地址。因此,32位微处理器处理就好像是一个快速的8086、8088微处理器。

 

V86模式和实模式的区别

V86模式和实模式都是为了与8086/8088兼容而设置的16位操作模式。但是V86是在保护模式下运行8086的工作模式,所以V86模式跟真正的8086模式有很大的区别。

  ①在V86模式下可寻址的存储空间虽然为1MB,但是可以采用存储器分页管理机制,将1MB的存储空间分为256个页面,每页4KB。

  在V86模式下中断处理不是采用实模式下的中断向量表,而是采用保护模式下的中断描述符表,即采用保护模式下的中断处理机制。

  ②实模式是整个微处理器的工作模式,而V86模式是在保护模式下一个任务内的代码段、数据段和堆栈段的工作模式。因此,在32位微处理器的任务系统中,可使用其中的一个或多个任务同事工作于V86模式,运行在V86模式下的任务被称虚拟86任务,简称V86任务。

 

由此可见,V86模式即保持了与8086/8088工作模式的兼容,又支持了保护模式下的保护机制、存储分页管理机制和多任务机制。另外,在V86模式下,各段的特权级均为3级,而在实模式下,各段的特权级都为0级。因此,V86模式限制了一些特权指令的执行。

 

虚拟8086机

在V86模式下,V86任务的执行是由一个被称为V86监控程序的系统软件控制的。V86任务和V86监控程序以及微处理器的硬件组成了一个“虚拟8086机”,其中V86监控程序控制V86任务的外部界面、中断和输入/输出,微处理器硬件提供该任务运行所需的1MB的虚拟地址空间,并执行V86任务中的指令。

 

    32位微处理器可在保护模式和V86模式之间切换。windows操作系统和windows应用程序运行在保护模式下,如果要运行DOS操作系统和DOS应用程序,微处理器就切换到V86模式,并且由虚拟机管理器VMM负责这种切换。

 

一、 基于微处理器的微机系统软件模型

 

所谓微机系统软件模型,就是从软件编程的角度去看待微型计算机系统,也就是从编程使用的角度来考量危急中的微处理器、存储器及I/O系统,而不深究其内部电路结构的硬件细节。

 

微机系统软件模型所描述的对象包括微处理器的寄存器模型、存储器模型和I/O地址空间模型。这些都是用户可以用程序的方法访问和使用的危机系统资源,而那些用户不可以用程序的方法访问和使用的硬件资源(如微处理器的运算部件,流水线等)则不属于微机系统软件模型的范围。

 

微机系统软件模型概述

①从编程的观点来看待微机系统的硬件资源,可以简化对内部硬件细节的了解。例如,对微处理器,就只需着重了解他的可编程的寄存器的功能、使用方法,而对微处理器内部电路结构不必在意。

②使用微处理器的汇编语言编程,也必须从软件的观点去了解微处理器及其存储器子系统和I/O子系统的操作。掌握软件模型中寄存器的功能和使用方法、存储器的分段与分页机制和访问方法,以及I/O端口的读、写方法,对汇编语言程序设计至关重要。

③由于微处理器的活动(操作)都是靠软件来驱动的,用户编写什么样的程序就可以使微处理器产生什么样的活动(操作)。所以,用户对微机的应用,实际上就是用过自己的程序来实现。

④,从兼容性来看,强调功能上、逻辑上兼容,而不强调物理上的兼容即内部电路细节上的兼容,采用软件模型也是合适的。

 

二、实模式下微处理器的寄存器模型

先来看看下面图片:

图中不打阴影的部分表示在实模式下可以编程使用的寄存器,包括:

4个通用寄存器:AX、BX、CX、DX

6个段寄存器:CS、DS、SS、ES、FS、GS

2个指针寄存器:BP、SP

2个变址寄存器:SI、DI

1个指令指针:IP

1个标致寄存器:ELAGS

1个控制寄存器:CR0

 

下面来介绍个寄存器的作用和格式

通用寄存器

实模式下的4个通用寄存器是:累加器(A)、基址寄存器(B)、计数寄存器(C)、数据寄存器(D)

作为16位使用时在寄存器名后面加X,如AX、BX、CX、DX等

作为32位使用是,则在16位的基础上加E,如:EAX、EBX、ECX、EDX。

 

 4个寄存器各自具有不同的功能:

A寄存器猪腰用于存放程序执行过程中的一些中间结果,以及存放I/O数据

C寄存器在串、循环、循环移位、移位等操作中作计数寄存器

D寄存器也能存放地址信息,如存放I/O端口地址等

 

 ②段寄存器

段寄存器是为了存储器分段的需要而设置的,用于存放段基址,所有段寄存器都是16位的。因此段基址必须是16B的整数倍,并且段与段之间可以是连续的、相邻的、独立的或者是部分重合的。系统中可以同时有6个段被激活而处于工作状态,即:

    1个代码段

    1个堆栈段

    4个数据段(D、E、F、G)

这些寄存器中保存的值被称为当前段寄存器值。

 

段寄存器内的数值可以由程序员通过软件加以改变。因此程序要访问存储器的哪个段,只需要将该段的段基址写入相关寄存器。例如:

      要选用存储器中不同数据段空间的数据,只要改变数据段寄存器(DS、ES、FS和GS)中的数值即可。

同样的,当执行段间调用指令使程序发生转移时,就需要改变代码段寄存器CS的数值。

 

一段内存是否可以用来做代码的存储空间、数据的存储空间、还是做堆栈空间,主要是由微处理器中的段寄存器来指定。例如:

      由CS与IP置顶为代码的存储空间

      由DS与偏移置顶数据的存储空间

      由SS与SP置顶为堆栈存储空间

 

 

指令指针

实模式的指令指针IP为16位,它只是存储器中当前代码段内的偏移量,即代码与代码段段基址的距离。在实模式下,由微处理器把IP的偏移量和CS的当前值组合为指令代码的地址,故要访问代码的地址为CS:IP。可见,指令指针是存放程序代码的偏移地址的,而不是存放数据的。

 

指针和变址寄存器 

由于有些指令(算术、逻辑指令)的操作数在数据寄存器中,另一些指令(串指令)的操作数不在数据寄存器中,而在存储器内,因此,需要一些能够确定操作数在寄存器中的位置的寄存器。指针寄存器和变址寄存器就是用于存放偏移量地址,而不是存放数据的寄存器。他们分别以指针方式或变址方式选中存储器的64KB段内的具体存储单元。

 

指针寄存器(SP、BP)用于选取堆栈段内的具体存储单元,即指针寄存器的值指向堆栈段的栈顶或者栈内的具体存储单元;

变址寄存器(SI、DI)用于选取数据段内的具体存储单元,即变址寄存器的值指向存储器数据段或附加段内的存储单元。

 

所以,如果要访问存储器堆栈存储区,只要把SP或BP内的数值与堆栈段寄存器SS中内容合并成存储器物理地址即可。其中,栈顶指针SP或BP内的数值与堆栈段寄存器SS中内容合并成为存储器物理地址即可。其中栈顶指针SP与SS组合起来(SS:BP)形成20位地址指针,指向堆栈内的存储单元。

 

实模式下,BP经常用于读取堆栈内一些参数,传递给子程序,因而称为子程序参数传递的一种常用方法。为此,子程序内应包括使用基址寻址的指令,该指令将从堆栈里读取参数值。

另外两个变址寄存器SI和DI用于存放数据段的偏移地址。在指令中包含变址时,SI用于保存源操作数的偏移量地址,DI用于保存目标操作数的偏移地址。

 

 

标志寄存器

先来看看标志寄存器的图片:

 

标志寄存器(ELAGS)是一个32位的寄存器,用于指示微处理器的状态并控制他的工作。标志寄存器在实模式下只使用9位,即下图:

它包括状态标志与控制标志两类。状态标志的逻辑状态取决于指令执行的结果,是自动产生的,其他指令可以使用这些标志来决定是否使用程序发生转移。控制寄存器是在程序中使用专门指令设置的,不是自动产生的,用来控制一些操作,如中断的开和关、地址的加与减的方向等。

 

⑴6位状态标志的作用

●进位标志位CF(Carry Flag)

    当执行算术指令时,若其结果的最高位有进位或借位,则将CF置1;否则复位

●奇偶标志位PF(Parity Flag)

    当操作结果中有偶数个1时,置1;否则,置0。

●辅助进位标志位AF(Auxlliary Carry Flag)

    在8位、16位、32位二进制数内,若其较低字节中有低位半字节向高位半字节进位,

    或者高位半字节借位给低位半字节,则将AF置1;否则,AF复位

●零标志位ZF(Zero Flag)

    如果算术或者逻辑运算结果为零,则将ZF置1;否则,ZF复位

●符号标志位SF(Sign Flag)

    记录运算结果的符号,若结果为负,则SF置1;否则,置0

●溢出标志位OF(Overflow Flag)

    在运算时,若带符号的结果超出机器能够表示的范围,则OF置1;否则,置0

 

⑵3位控制标志的作用

●陷阱标志位TF(Trap Flag)

    用于设置陷阱中断,若TF置1时,则在执行指令时产生单补中断,即CPU进入单步方式:

              它执行一条指令后就跳到一个专用服务器程序上去,检查指令执行情况,用于程序调试。

●中断允许标志IF(Interrupt Flag)

    当IF置1时,允许中断请求;当IF置0时,禁止中断请求

●方向标志位DF(Direction Flag)

    决定串操作的方向。当DF置1时,串指令自动按减地址执行,即串数据传输过程是从高地址到低地址;

             当DF置0时,串指令按增加地址执行,即串数据传输过程是从低地址到高地址。即:

                   在串处理时控制变址寄存器SI和DI递增或递减方式。

                        至于每次递增或者递减多少,取决于每次传输的是字节、字、双字

                           若是字节,则加/减1;

                           若是字,则加/减2;

                           若是双字,则加/减4;

 

 

 

 

三、  保护模式下微处理器的寄存器模型

先来看看下面的图片:

对比前面实模式下寄存器的图片可以发现:

    保护模式寄存器模型是实模式寄存器模型集的一个超集,保护模式模型除了实模式中使用过的寄存器之外,新增了4个系统地址寄存器GDTR、IDTR、LDTR、TR和4个控制寄存器CR0~CR3。另外,一些寄存器的功能也得到了扩展,例如:指令指针为EIP,长度为32位;标志寄存器EFLAGS的更多位得到了利用。

 

系统地址寄存器

在保护模式下,微处理器内部新增了4个寄存器 GDTR、IDTR、LDTR和TR,这些寄存器是为了提供地址信息在确定全局描述符表GDT、中断描述符表IDT、局部描述符表LDT和任务状态段TSS等4种表格在存储器中的位置,故把他们叫做系统地址寄存器。

 

①全局描述符表寄存器GDTR用来在存储器地址空间定位一个全局描述符表GDT。GDTR的格式如下图:

从图中可以看出,GDTR长48位,由这个48位地址作为指针,直接指定GDT表在存储空间的位置。其中GDTR的高32位基地址Base,指示GDT在存储器中的开始位置。32为基址允许把GDT定位在线性地址空间的任何地方。

 

GDTR的低16位指示GDT的段限长Limit,它规定了GDT按字节计算的大小(Limit的值要比实际表小1。例如,如果Limit=00FFH,则表长为256B)。16位段限长允许GDT表最大可达65536B,因而最多能容纳8192个描述符(每个描述符长8B),实际应用中根据需要来确定GDT的长度。

 

中断描述符表寄存器

中断描述符表寄存器IDTR用来在存储器中定位一个中断描述符表IDT。IDTR也是48位长,由这个48位地址指针,直接指定IDT在存储器空间的位置。其中IDTR的高4个字节基地址Base,用于表示IDT在存储器中的起始地址,32位基地址允许IDT定位在线性地址空间的任何地方。

 

IDTR的低2个字节表示IDT的段限长Limit,以定义表的大小(表实际的大小等于Limit+1个字节)。可定义IDT的最大长度为65536字节长,但系统只支持256个中断和异常,所以,实际上IDT最大长度是2KB,以字节为单位的段界限为7FFH。

 

局部描述符表寄存器

局部描述符表寄存器LDTR并不直接指示局部描述符表LDT在寄存器中的位置,因此,他的格式与GDTR和IDTR都不同,LDTR的格式如下:

LDTR是16位长。这个16位的值是一个选择子,他指向存放GDT中的LDT的描述符。选择子不能直接定位LDT,只有描述符才能定位LDT。因此,当向LDTR中装入一个选择子是,相应的LDT的描述符就自动从GDT中读出来并装入LDTR的高速缓冲寄存器中(如上图中虚线框部分)。真正的LDT描述符就在这个高速缓冲寄存器中。它是64位的,其中32位的Base值只是LDT在存储器的起始地址,16位的Limit值指示LDT的大小,还有12位的Attribute值说明LDT的属性。

 

可见,LDT需要2次定位。首先利用LDTR中的选择子,在GDT中找到LDT的描述符,然后利用LDT的描述符,来定位LDT在存储器中的位置。

 

 

任务状态段寄存器

任务状态寄存器TR与LDTR类似,也不能直接指定任务状态段TSS在存储器空间的位置。

 

TR是16位长。这个16位的值也是一个选择子,不过这个选择子用来指示TSS段的描述符在GDT表中的位置的。找到了TSS段描述符,通过描述符就能够指定TSS段在存储器空间的位置了。因此,当选择子装入TR时,相应的TSS段的描述符就自动从全局描述符表GDT中读取并装入TR的高速缓冲寄存器中(如上图右侧虚线框部分)。这个高速缓冲寄存器为64位,它提供了TSS段的32位起始地址Base和TSS段的16位Limit以及TSS段的12位属性Attributte。

 

可见,TSS段也需要2次定位。首先,利用TR中的选择子,在GDT中找到TSS段的描述符,然后,利用TSS段的描述符,来定位TSS段在存储器中的位置。

 

 

控制寄存器

保护模式新增的4个32位控制寄存器CR0、CR1、CR2、CR3 ,是为了控制微处理器的工作方式和分段管理机制以及分页管理机制,如下图:

 

 

①控制寄存器CR0

CR0的主要功能是选择微处理器的工作方式和存储器的管理模式。各位的含义如下:

      ⑴保护模式允许置PE位

          PE位控制微处理器是进入是模式还是进入保护模式,因此由叫做微处理器工作模式控制位。

             PE置0,为实模式

             PE置1,为保护模式

          系统开机或者重启时PE清零,微处理器处于实模式。如果要进入保护模式,必须通过程序将PE置1

      ⑵分页管理启用位PG

          PG控制禁止还是启用分页管理机制。

              PG置0,禁止使用分页机制,此时由分段机制形成的线性地址作为物理地址;

              PG置1,启用分页机制,此时线性地址还不是物理地址,线性地址必须经过分页转换后

                  才能形成物理地址。

如下图:

由于PG=1且PE=0是非法组合,即实模式下不能使用分页管理,只有保护模式下才能分页,因此,当用PG为1和PE为0的值装入CR0寄存器将引起通用保护异常。

 

      ⑶协处理器操作控制位(MP、EM、TS、ET)

          CR0中的位1~位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位)和ET(扩展类型位),他们控制浮点协处理器的操作。

 

 

②控制寄存器CR2

CR2 由分页管理机制使用,用于报告发生页故障时的出错信息。如果某页不在存储器中,则在页转换时会发生缺页故障,此时,微处理器把引起页故障的线性地址保存在CR2 中。操作系统中的页故障处理程序通过检查CR2 的内容,就可以查出是线性地址空间中的哪一页引起的故障。

 

③控制寄存器CR3

 CR3 也是由业管理机制使用的,用于保存页表目录的起始物理地址。在确定页表目录在存储器空间的位置时,需要使用页表目录的基地址,CR3的高20位就是提供页表目录的基地址的,故称页表目录的基地址寄存器PDBR。由于基地址仅高2位有效,低12位不用,所以,向CR3中装入一个页表目录的其实物理地址(基地址)时,低12位必须为0;而从CR3中取值时,低12位被忽略。

 

改变功能的寄存器

 一些在实模式和保护模式下都可以使用的寄存器,在切换到保护模式时,其功能会发生变化。

 

①段寄存器

段寄存器在保护模式下称为段选择子寄存器,仍然是16位,其值不在是段基址而是选择子。选择子并不直接置顶存储器地址,它选择一个定义存储器段的段基址、大小和属性的描述符。其具体格式以及作用到以后再研究。

 

值得指出的是,在保护模式下,每个段寄存器都是一个相应的高速缓冲寄存器,他对一般编程人员是不可见的。

 

 ②标志寄存器

在保护模式下标志寄存器EFLAGS长度扩充到32位,新增加了5位。如图:

这些新增的5位标志位只有在保护模式下使用。例如:输入/输出特权级码IOPL、嵌套任务标志NT、恢复标志RF,以及V86模式标志VM。

 

●IOPL(2位) 用来指定最大输入/输出特权级。

     如果IOPL值为00,则只有在特权级0级才能访问I/O操作。

     如果IOPL值为11,则I/O允许较低特权级访问。

 

NT 指明当前任务是否嵌套,即是否被别的任务调用。该位在发生任务嵌套时自动设置,并且只能用软件复位。

 

●VM 指明VM位为1时,微处理器就处于V86模式。此时,其当前特权级由微处理器自动设置为3。

    由于微处理器没有提供直接改变VM标志位的指令,并且只有当前特权级CPL=0时,对VM的改变才有效,

    所以V86模式与保护模式的切换不能简单地通过改变VM位而进行。

 

RF  恢复标志,与调试寄存器断点或单步操作一起使用。

 

AC  对准检查标志,当AC=1时,且程序运行特权级为3时,对存储器访问边界进行对准检查。

 

VIF  虚拟中断标志,在虚拟方式下中断标志只对Pentium机有效。

 

VIP  虚拟中断暂挂标志,为Pentium微处理器提供有关虚拟模式中断的信息。它用于多任务环境下,

     给操作系统提供虚拟中断标志和中断暂挂信息。

 

ID  标识标志,指示Pentium微处理器支持CPUID指令。CPUID指令为系统提供有关Pentium微处理器的信息,

    如:版本、制造商等。

 

 

程序不可见寄存器

 32位微处理器中包含了一些不直接被应用程序访问的“程序不可见的寄存器”,又叫程序不可见高速缓冲寄存器(并不是微处理器中的一级或者二级高速缓冲存储器Cache),是用来保存描述符的。一个描述符包含段基址、段限长和段属性共8个字节64位长,因此,程序不可见高速缓冲寄存器也是8个字节。

 

6个段寄存器和任务寄存器TR,以及局部描述符表寄存器LDTR都分配了一个程序不可见高速缓冲寄存器,如下图虚线部分所示:

 

原来,每当用户在程序中向段寄存器(或TR、LDTR寄存器)装入一个新的选择子时,微处理器就会自动访问描述符表,从表中读取一个描述符,并把描述符装入该寄存器对应的程序不可见高速缓冲寄存器中。这个描述符一直保存在这里,并在访问存储器段时使用,知道段的选择子再次变化为止。这就使得微处理器在重复访问一个内存段时,不必每次都花时间到存储器中查找描述符表,而是直接快速地从程序不可以见寄存器中读取和使用描述符,因此称之为高速缓冲寄存器。

 

可见,程序不可见寄存器是用来提供描述符,以便指定存储段(代码段、数据段和堆栈段)、TSS段以及LDT段在存储器空间的具体位置的重要资源。虽然他们在程序中不出现,而由微处理器在内部直接操作,但是它们对定位与访问保护模式存储器的作用是不可忽视的。例如:

     为了定位与访问任务状态段,在程序中只需要将TSS的选择子装入任务寄存器TR,如同选择子装入段寄存器一样。这个选择子会自动访问全局描述符表,从中读取TSS的描述符,并且将任务状态段TSS的基地址、段界限和访问权限装入LDTR高速缓冲寄存器。

     至于为什么要把描述符以隐藏的方式存放在程序不可见告诉缓冲寄存器中,而不是放在显示的段寄存器中,其原因也许是为了使32位微处理器在保护模式下指令书写与在实模式下指令书写格式保持一致,都是向段寄存器写16位数据。虽然在16位数据的含义不同,在保护模式下入选择子时,也就同事向高速缓冲寄存器写入描述符,有了描述符也就等于有了段基址。

 

告诉缓冲寄存器是64位长,分3个字段(域),包括32位段基址,20位段限长和12位段属性。高速缓冲寄存器各字段的定义域格式如下图:

 

 

 

 

四、实模式存储器模型

 存储器软件模型是从软件编程的角度去看存储器是什么样子的,也就是用户在编程时只考虑如何使用存储器,而不考虑它的硬件细节。存储器软件模型的内容包括:存储器空间、存储器的分段与分页、存储器的寻址和存储器物理地址的形成等。

 

实模式下存储器地址空间和数据组织

 ①实模式下存储地址空间

32位微处理器在实模式下,支持1MB存储器,从软件观点看这1MB的存储器是由00000H~FFFFFH地址编码(编号)的空间。数据以字节为单位存储在连续的地址码所组织的空间内,但可以连续两个字节(字长)和连续4个字节(双字长)来访问存储空间。

 

实模式的1MB存储空间都可以被用户访问,不过根据安排有些地址空间有专门用途,专用存储空间不能存储程序中的数据或者指令,如:00000H~003FFH区域专门用于存放中断向量表。通用区域可以存储程序的指令或者数据,通用区域的范围是400H~FFFFFH。

 

②实模式下存储器的数据组织

 存储单元可以存放数字、字符和指令等信息。一个存储单元中存放的信息称为该存储单元的内容。如下图:

 如果数据是以字节为单位存入存储器的,如上图中 0004H中存放的信息为34H,则表示为(0004)=34H。

如果数据是以字为单位存入存储器的,如上图中表示为(0004)=1234H。

 

 所以,同一个地址即可看作是字节单元的地址,又可看作是字单元的地址,这要根据使用情况而定。

 

实模式存储器地址的分段

 ①实模式存储器地址的分段

实模式采用分段的办法来管理和使用存储器,每个段为64KB。因此,程序员在编写程序时要把存储器分成段,并在程序的开头设置各段寄存器的值,以定义所需要用到的几个段。一般情况下,各段的地址在存储器中的分配是由操作系统负责的。

 

值得注意的是:  实模式下的段不能起始于任意地址,而必须从字节地址的16的整数倍的任意一小段开始。

          微处理器规定:从0开始,每16个字节为一小段,下面列出了存储器最低地址区的三个小段

          的地址区间,每行为一小段。

                

              

其中,第一列就是每个小段的首地址。可以看出这个首地址是字节地址的16整数倍,若以十六进制表示,则最低位为0(即20位地址的低4位为0)。在1MB的地址空间里,共有64KB个小段首地址。

 

每个段可以独立占用64KB存储区,如下图:

 

同时,各个段也可以重叠,如下图:

 

下面说明段重叠的含义:

    假设有一个存储区,包括一个代码段、数据段和堆栈段。代码段的首地址是2000H,代码长度为8KB,数据段的数长度只有256B。此时段的分配如上图所示。从上图可以看出来,代码段的最大区域可以是02000H~11FFFH,但由于代码长度只用了8KB,所以代码段结束后的第一个小段的首地址4000H就可以作为数据段的起始地址。也就是说,在这里,代码段和数据段可以重叠一起。同理,数据段的最大区域可以是04000H~13FFFH,但由于数据段只需要2KB,所以数据段结束后的第一个小段的首地址4800H就作为堆栈段起始地址。在这里,数据段和堆栈段又重叠在一起了。当然,每个存储单元的内容是不允许发生冲突的。在这里所谓的段重叠只是指每个段实际占用的大小可以根据实际需要来分配,而不一定占有64KB的最大段空间。

 

实际上,段区的分配工作是由操作系统完成的。但是系统也允许程序员在必要时指定需占用的内存区,例如:可由程序员指定代码段的起始位置(从100H地址开始)。

 

 

②实模式存储器逻辑地址

存储器逻辑地址也就是编程时所使用的地址,实模式的逻辑地址由段基址和偏移地址两部分组成,在程序中,段基址值用16位的段寄存器(CS、DS、SS、ES、FS、GS)表示,偏移量用16位的指令指针IP、基址寄存器BX、指针寄存器BP或变址寄存器SI/DI表示。例如:代码段逻辑地址表示为 CS:IP,数据段逻辑地址表示为 DS:BX,也可用其中几个寄存器的内容组合成一个偏移量。

 

段基址与偏移量的关系如下图:

 其中,数据段寄存器DS中的段基址表示存储器中64KB的段的起始位置,即段中的最低位地址。BX寄存器中的偏移量是要访问的存储单元的位置与起始地址的距离。因此,段的最低地址的偏移量是0000H,最高地址的偏移量是FFFFH。

 

 实模式下存储器寻址

 实模式下只允许微处理器寻址第一个1MB存储器空间,因此第一个1MB存储器称为实模式存储器或者常规内存。

 

①段+偏移的寻址方案

这个不写了,太熟悉不过了,看下图:

 

②段+偏移的寻址组合的潜在规则

段+偏移的寻址组合,实际上就是段寄存器和偏移寄存器组合。微处理器对此有一套规则,用于访问不同的存储器段。这套规则既适用于实模式也适用于保护模式,该规则定义了各种寻址方式中,段地址寄存器和偏移地址存储器的组合方式。例如:

    代码段寄存器总是和指令指针组合成 CS:IP用于寻址程序的下一条指令。

 

另外一种默认的组合用于堆栈。通过栈指针(SP)或基址针(BP)寻址寄存器堆栈段中的数据。这些组合用SS:SP或SS:BP表示。例如:

    如果SS=2000h,BP=3000h,则微处理器寻址堆栈段寄存器的23000h单元。

 

实模式下,微处理器默认的段寄存器与偏移寄存器的组合如下图:

 另外,微处理器内有一个叫“段超越前缀”的装置,可以改变上述寄存器和偏移寄存器的默认组合,

例如:

    数据访问时可让ES寄存器作为数据段寄存器。

 

 ③段+偏移寻址方案允许重定位

 可重定位的程序是一个可以放入存储器的任何区域且不加修改仍然能执行的程序,可重定位的数据是可以放在存储器的任何区域,且不需要修改就可以被程序引用的数据。

 

各种PC微型计算机系统的存储器结构可能不同,如果没有这个特性,若想要在不同的机子上运行程序,可能要大范围的重写或者更改,这将会是可怕的噩梦。

 

存储器用偏移地址在段内寻址,如果我们将整个存储器段移到存储器系统内的任何地方,只要将段寄存器内容改变为程序所移到的新存储器的地址,而不许改变其偏移地址。

例如:

    一条指令位于距段首地址8个字节的位置,则它的偏移地址是8;整个程序一到新的存储器后,这个偏移地址8仍然指向距离段首地址8个字节的位置。

 

实模式下存储器物理地址的形成

①存储器物理地址的计算

不想多说,看下图:

 

 

②不同的逻辑地址可以映射成同一个物理地址 

 不解释。

 

 

 

 

 

五、保护模式存储器模型

 

①保护模式下虚拟存储器的地址空间

 保护模式下,程序中使用的地址都是虚拟地址,因此虚拟地址也就是逻辑地址。32为微处理器支持虚拟地址空间为64TB。

 

在32位微处理器的存储器分段模型中,将存储器空间分成了全局和局部地址,各占32TB,并且各包含8192个段,每个段4GB,如图:

 图中表示的是虚拟存储空间的最大值,但由于在实际应用中不是所有的描述符都在使用,所以实际使用的虚拟地址并没有这么大。

 

把虚拟地址空间分成全局和局部地址的目的是:

    32位微处理器的多任务环境中,防止任务之间的相互干扰及破坏。当微处理器启动一个任务时,它可以访问全局存储器段也可以访问局部存储器段。全局地址空间,通常包含能被所有任务共享的资源和数据。局部地址空间的数据和代码只能被相应的任务访问,而不能被其他的任务访问,这就为防止任务之间的相互干扰及破坏提供了条件。

 

 ②保护模式下虚拟地址空间的分段

 在保护模式下虚拟地址空间也采用分段方式,并使用48位存储器指针来表示虚拟地址空间,即在程序中用48位的存储器指针来访问存储器的地址单元。48位存储器指针包含16位选择子和32位偏移量,如图:

其中,选择子用来选择虚拟地址空间中的一个段,选择子为16位,只有14位用于选择存储器段,最多可达214=16K个段。偏移量是32位长,段最大可达232B=4GB。因此,正好可以表达整个虚拟地址空间16K x 4GB =64TB。

 

在实际应用中,一个程序所包含的段的个数是有限的,每个段的大小也不会大到4GB。因此大多数程序所占用的地址空间要比64TB小得多。

 

保护模式下的段可以从任意地址开始,而不像实模式下的段必须从字节地址16整数倍的地址开始。

 

 

保护模式下存储器寻址

①保护模式下存储器寻址方案

保护模式下存储器寻址既可以访问1MB的存储区(常规内存),又可以访问1MB以上的存储区(扩展内存)的数据和程序。但是寻址这个扩展段,需要修改用于实模式存储器寻址方案。

 

在寻址扩展内存里的数据和程序时,仍然使用段+偏移地址的寻址方案,并且偏移地址仍然用于访问存储器段内的存储单元。区别是,保护模式下的段基址不再像实模式那样由段寄存器直接提供,而是一种间接的方式,即在原来放段基址的段寄存器里放一个选择子,由选择子选择描述符表内的一个描述符,然后从描述符中获得段基址。因为描述符中包含了存储器段的基地址、长度和属性。

 

由于段+偏移地址仍然用于访问1MB存储器内的数据和程序,所以保护模式指令和实模式指令是完全相同的。事实上,很多在实模式下编写的程序,不用更改即可在保护模式下运行。

 

 

现在来对比一下保护模式下“段+偏移”寻址组合 和 实模式下 “段+偏移”寻址组合:

 

保护模式下“段+偏移”寻址组合:

实模式下 “段+偏移”寻址组合:

 

 

 

②段+偏移地址寻址组合的潜在规则

和实模式差不多,只是32位微处理器可以使用32位寄存器,显然保护模式下的选择范围更大。

 

 

保护模式下段式地址的转换

保护模式下虚拟地址使用48位地址指针表示。而保护模式下的物理地址是32位共4GB的地址空间。因此,在保护模式下,将虚拟地址转变成为物理地址,实际上就是将48位的虚拟地址转变为32位物理地址。

 

保护模式下也采用与实模式相同的“段+偏移地址”的寻址方案,转变过程如下:

 

选择子--->描述符表中的段描述符--->从段描述符中读取32位段基地址--->再加上偏移量--->得到32位线性地址

 

 

保护模式下存储器地址空间的分页

①分页方式

保护模式下分页方式中,物理地址被划分成1048496页,每页4096B长,如下图:

分页管理器的页的大小固定为4KB,与分段管理器的段的大小不固定不同。分页大大简化了存储管理的实现。需要提到的是CR0中的PE位和PG位及CR3中的页表目录基址寄存器(PDBR)是实现分页管理的关键,这些将在存储器管理中讨论。

 

②保护模式下页式地址转换

页式地址转换是把32位线性地址转换为32位物理地址。这里的线性地址和物理地址都是以页为单位的,每页4KB,4GB的线性地址和物理地址空间,都可分为1M页。线性地址空间的页称为虚页,物理地址空间的页称为实页,为此,采用页表进行映射。

 

 

 

六、实模式下I/O地址空间模型

32位微处理器实模式下的16位I/O地址范围是0000h~FFFFh,共64KB的地址,但在实模式下实用实际应用中只用了低10位地址,即1024个I/O端口地址。每个地址对应一个字节宽的I/O端口。

 

I/O地址空间的分布如图:

地址0000h~00FFh是0页空间。0页是I/O地址空间的第一个256B寻址空间。0页内的I/O地址空间指定为系统板上接口芯片的输入或输出数据传输操作。其他页内I/O地址空间指定为扩展卡的输入或输出数据传输操作。

 

 

 

七、保护模式下I/O地址空间模型

保护模式下I/O地址也是16位的,从0000h到FFFFh,共64KB的地址,能寻址64个8位端口,或32K个16位端口,或16K个64位端口。与实模式下I/O地址空间模型不同之处有两点:

 

①保护模式的I/O数据传输有字节宽度、字宽度和双字宽度,并且存储器空间可以独立编址,也可以统一编址;

 

②保护模式的I/O地址空间有保护措施,采用标志寄存器中的IOPL标志位和利用任务状态段TSS中的I/O允许位图两种措施来实现对I/O地址空间的保护。

 

 

基于微处理器的微机系统的硬件结构

 

任何一个基于微处理器的微机系统都是微处理器、存储器系统和I/O系统3个部分通过总线相互连接而成的。如下图:(图中的各部分内容是将要讨论的内容)

 

 以下内容从应用的角度出发,着重了解微处理器、存储器和I/O端口和外部连接特性,即外部引脚的功能、逻辑定义和信息的传输方向等,而不在意他们的内部电路细节。

 

 

 

一、微处理器

 

微处理器在微机系统中的作用

 微机系统的核心是微处理器,他是微机系统的控制单元,也称为中央处理器CPU。如上图中所示,微处理器通过总线来连接存储器系统和I/O系统,通过执行存储在存储器中的指令,实现对存储器和I/O的访问与控制。

 

微处理器在微机系统中的主要工作有:

①在微处理器与存储器或者I/O之间传输数据;

②进行简单的算术和逻辑运算;

③通过简单的逻辑判定,控制程序的流向;

(微处理器正式通过这样一系列看似简单的工作,来完成很复杂的操作或者任务的)

 

 

32位微处理器家族,已拥有从iA80386开始到现在的Pentium一大批成员,其功能越来越强,处理速度越来越高。但他们的基本功能和对存储器空间及I/O空间的支持差别不大。所以,有时把iA80386作为32位微处理器的一个实例进行讨论。

由于不同微处理器内部结构的差异和所采用的新技术不同,所以微处理器的硬件兼容性不像软件兼容性那样强。

 

 

微处理器外部特性

微处理器的外部特性体现在它的信号线引脚上,32位微处理器的基本信号引脚,按功能及连接的对象不同,可划分成4组,分别叫做存储器及I/O接口信号、中断接口信号、DMA接口信号和协处理器接口信号,如下图:

值得指出的是,从80386到Pentium的外部引脚在数量上越来越多,但对用户来说,更感兴趣的还是微处理器面向存储器和I/O设备的有关信号引脚。图中所示的引脚显然做了简化之后的基本信号引脚。

 

上述个信号线的名称、功能、I/O及有效电平如下表:

 

 

 

微处理器面向存储器和I/O的接口信号

微处理器面向存储器和I/O的接口信号,包括地址、数据和控制信号。

 

①地址信号线

⑴A0和A1不出现在地址线上

      在实模式下,地址线A2~A19有效;在保护模式下,地址线A2~A31有效。但是实际上,实模式的地址长度有20位,保护模式的地址长度有32位。那么还有2位地址线A0和A1到哪里去了呢?原来这两位地址被微处理器内部译码,与数据传输的字节数(数据宽度)一起产生字节允许信号用以支持按4个独立的字节宽度的存储体(Bank0~Bank3)来组织32位存储器地址空间和I/O地址空间了。

      对32位微处理器来说,地址信号线就是A2~A31.他们用于传输从微处理器到存储器和I/O设备的地址信息。

 

 

⑵CPU和存储器之间的地址线

      在实模式下,20位地址给出了微处理器寻址1MB物理地址空间的能力。在寻址时,需要使用地址线A2~A31和字节允许线

      另外,在保护模式下,通过软件提供的虚拟地址,可以寻址64TB的虚拟存储地址空间。

 

 

⑶CPU与I/O之间的地址线

      无论是在实模式下还是在保护模式下,32位微处理器均具有独特的64KB的I/O地址空间。所以,在寻址I/O设备时,只需要使用地址线A2~A15和字节允许线

 

 

⑷存储器地址线与I/O地址线的区分

      微处理器的地址信号线既连接到存储器,又连接到I/O设备接口芯片,那么,如何来识别从微处理器送出的地址信号是发给存储器的,还是发给I/O设备的呢?为此,微处理器设置了信号=0时,表明是I/O总线周期,地址信号发给I/O设备。

 

 

 

 ②数据信号线

 ⑴32位微处理器的数据总线

      32位微处理器的数据总线由32条数据线D0~D31构成,D31为最高位,D0为最低位。微处理器通过这些数据线与存储器及I/O设备之间进行并行通信。传输的信息有:对存储器的 读/写 数据与指令,对I/O设备的输入或输出数据、命令代码及状态,以及读取来自中断控制器的中断号等。

 

 

⑵字节允许信号在数据传输中的作用

      在一个总线周期内,微处理器通过数据总线可以传输一个字节,也可以传输一个字或一个双字。因此,微处理器必须告诉外部电路数据将通过数据总线的那一部分进行传输,微处理器是通过激活相应的字节允许信号来做到这一点。其中:

            对应于数据线D0~D7

            对应于数据线D8~D15

            对应数据线D16~D23

             对应数据线D24~D31

 如果从存储器或I/O设备 读/写 一个数据字节,则使用1个;读/写 一个数据字,使用2个;读写一个数据双字使用4个。字节允许信号与数据总线的关系如下图:

              

 

 假设:字节允许代码,将会产生多少字节的数据宽度?数据传输经过哪些数据线?

          从上表可以知道,它传输一个数据字,并且是经过数据线D16~D31传输的。

 

 

 

③控制信号线

 ⑴总线周期指示信号

      总线周期指示信号是指。总线周期指示信号并不是直接对存储器和I/O设备接口的控制信号,而是在每个总线周期开始时发出总线周期指示码,然后,在微处理器外部的总线控制逻辑电路中,对三个总线周期指示信号所组成的总线周期指示码进行译码,产生对存储器和I/O设备接口的控制信号。下面先来看看两个名词。

 

        ●总线周期

              总线周期是微处理器完成一次对存储器或I/O设备端口读/写操作的过程。

              因此,总线周期是处理器与外部交换数据的基本过程,并且,总线周期有不同的类型。

        ●总线周期类型

              总线周期类型是由微处理器的总线周期指示信号及有关控制信号经过译码产生的存储器

              读/写信号、I/O读/写信号和中断回答信号等不同控制信号类型。

可见,总线周期指示信号与微处理器的其他控制信号配合,才能产生存储器和I/O设备接口的控制信号。

 

 

3个总线周期只是信号可以有8种组合,即有8种总线周期指示码来给出8种不同类型的总线周期。总线周期指示信号与总线周期类型的关系如下图:

              

 例如:若总线周期指示码=010,则将产生什么类型的总线周期?

            通过查表,我们可以知道,总线周期类型是:I/O数据读。因而产生

        它从I/O设备读取数据。

 

 

⑵地址线A20屏蔽信号

      A20屏蔽信号使处理器把地址限制在00000000h~000FFFFFh之间,就像8086处理器一样。这使得处理器系统可以像8086微处理器的1MB模式存储器系统一样工作。当访问1MB以内的存储空间时,屏蔽地址A20

=0;当访问1MB以上的存储空间时,则开放地址线A20,置=1.

 

 

⑶其他控制信号

      ●地址状态信号逻辑0有效。

            当它有效时,表示总线周期指示码()、

            字节允许码()以及地址信号码()全为稳定状态,

          表明总线周期指示码和地址信号码有效的。

       ●准备好信号逻辑0有效。

             当它无效时,表示存储器或I/O设备尚未准备好,要求在当前总线周期中插入等待状态。

             只有当它变为有效时,即慢速存储器或I/O设备准备好时,才允许与微处理器交换数据。

      ●总线封锁信号逻辑0有效。

             当它有效时,封锁共享资源,以独占使用。此信号用于支持多处理器结构。

 

 

 

④微处理器面向外部中断的接口信号

 面向外部硬件中断的信号有两种:可屏蔽中断请求和不可屏蔽中断请求

 

⑴可屏蔽中断请求

      INTR逻辑1有效。当它有效时,表明I/O设备需要得到服务。微处理器识别出一个有效的中断请求后,

      在条件允许时,启动一个中断响应总线周期,其总线周期指示码为000.这个总线周期指示码被送

      到总线控制逻辑电路译码,产生一个中断响应信号,通知I/O设备中断请求已经得到同意,

      并通过数据线从外部中断控制器读取中断类型号。这样就完成了中断请求与中断响应的握手过程。

      可见,中断响应信号,并不是由微处理器直接发出的。

⑵不可屏蔽中断请求

      上述可屏蔽中断请求可以通过对标志寄存器的IF位置1或者置0来予以允许或禁止。

      而不可屏蔽中断请求则不能。只要在端出现0到1的跳变,一个中断服务请求就

      被封锁在微处理器之内,而与IF位的状态无关。

 

 

 

 ⑤微处理器面向的接口信号

 面向外部DMA控制器的信号只有两个:

 

当外部的DMA控制器要求占用总线控制权时,它就通过HOLD信号向微处理器或者仲裁器提出申请。在当前总线周期完成后,微处理器就进入保持状态,使总线信号处于高阻态,并通过HLDA信号线通知外部DMA控制器它已经交出了总线控制权。这样就完成了保持请求/保持响应的握手过程。

 

至于DMA控制器何时要求占用总线控制权,这是由I/O设备决定的,即当I/O设备需要与存储器进行DMA方式数据传输时,由I/O设备向DMA控制器提出请求DREQ,然后才由DMA控制器向微处理器发总线保持请求HOLD,申请占用总线控制权。

 

 

二、存储器系统

 ①存储器的分类

存储器可分为主存储器和辅助存储器。而主存储器包括只读存储器ROM和随机存储器RAM。辅助存储器有闪盘、硬盘等。

 

(一)ROM存储器

ROM存储器是将程序或者数据已经写入,但是用户只能读取,故称为只读存储器。比如:系统配置的BIOS程序就是存放在ROM存储器中的,并且不会因为停电而丢失,因此,开机就可以运行其中的引导程序。

 

因为只读不写,故ROM存储器只设置输出允许和芯片允许控制信号。

 

当存储在ROM中的程序或者数据需要改变,而且又要长期保存,并且在关机停电后不会丢失时,可以采用另外一种ROM,他们是EPROM和EEPROM,前者叫做可擦除可编程只读存储器,如:2716EPROM。后者叫电可擦除可编程只读存储器,它不需要通过专用的工具(编程器)来擦除,然后再重写。

此外,快闪存储器与下面将要讨论的SRAM存储器的唯一区别是快闪存储器需要12V编程电压来擦除原有的数据和写新的数据。

 

(二)RAM存储器

RAM存储器可以随时从中读取或者写入程序与数据,故称为随机存取存储器。所以,RAM存储器除了设置输出允许和输入允许控制信号外,还需要设置写允许信号线。一旦关机或者停电,就会丢失所有数据。

 

RAM存储器可分为静态SRAM和动态DRAM。其差别在于是否要求RAM中的信息进行定时刷新(周期性地读取或者写入),静态SRAM在信息写入之后,不需要额外进行刷新就能维持,而动态RAM要维持写入的信息不小时,就必须不断地刷新。

 

②存储器件的外部特性

为了与微处理器连接并且交换信息,存储器件一半都可以有以下(引脚)信号线:

    ●地址线(输入)

        用来选择存储器件中的存储单元。地址线总是被标为从最低位A0到An

    ●数据线(双向)

        用来从存储单元读写数据。通常标为D0~Dn

    ●选择线(输入)

        用于选择或允许存储器件芯片,称为片选或者片允许。如果或者有效,

        则存储器件执行一次读/写操作;若无效,则存储器件被关闭,也就是不能执行读/写操作。

    ●控制线(输入)

        用来控制存储器件数据的输入或者输出。ROM与RAM的控制线稍微有不同:

               a:ROM使用输出允许控制信号,若有效,且有效,则允许输出;

  

                 b:RAM使用一条或者两条控制线,使用一条控制线时就是

                      当=1时,允许读(输入);

                      当=0时,允许写(输出);

 

③存储器地址空间的存储体组织

(一)存储器地址空间的存储体组织

 32位微处理器,在保护模式下32位地址线可以形成4GB的物理存储器地址空间。

     从软件的观点来看,存储器可以按字节来寻址,其地址范围是从00000000h~FFFFFFFFh。

 

    从硬件的观点来看,此物理地址空间由4个独立的字节宽度的存储体(Bank0~Bank3)组成32位宽度的存储器,如下图:

     

 这种32位宽度的存储器组织结构允许以字节、字或者双字为单位访问存储器。

 

 (二)存储器地址空间的访问格式

 虽然32位存储器地址空间在硬件上是以双字存储单元组织的,但在软件上实际访问存储器时,不一定都是固定以双字存储单元进行存取,而是有3中不同宽度,即3中访问格式:

    a:访问双字的1个字节

          可以访问双字中4个字节的任何一个字节,具体访问哪一个字节,取决于

          哪一个字节允许信号有效,如下图:

        

         只有,其他的字节允许都无效,表示访问保存在Bank1中的字节数据D8~D15.

 

    b:访问双字中的一个字

         可以访问双字中2个字的任何一个字,具体访问哪一个字,取决于哪2个字节允许信号同时有效。

         如下图:

        

           图中表示访问保存在Bank0和Bank1中的字数据D0~D15

 

          c:同理,访问一个双字的道理也是一样的,如下图:

        

 

 I/O系统

①I/O 的地址空间

32位微处理器的I/O子系统的地址空间与早期的8086微处理器的I/O系统完全兼容。I/O地址线都是16根,故系统中的I/O空间都是64KB,并且都采用IN和OUT指令在微处理器和I/O设备间传输I/O数据。

 

I/O接口通常连接的是8位的I/O设备,如打印机和键盘。不过现在已经有16位甚至32位的I/O设备,如图像显示器接口等。这些更宽的I/O通道提高了微处理器到I/O设备间的数据传输率。

 

 

对32位的I/O设备,I/O地址线A0~A1不出现,端口地址线是A2~A15,并且用来选择传输一个字节、字、双字的I/O数据。

 

以上是独立编址的I/O空间,对存储器映射的I/O系统就有所不同,如果采用存储器映射的I/O,那么I/O空间的大小可以比64KB大得多。对存储器映射的I/O,因为I/O设备被当成存储器,故用于在微处理器与存储器系统之间传输数据的指令都可用来进行I/O传输。

 

 

②微处理器与I/O系统的接口

 (一)I/O系统接口的任务

    I/O系统接口的任务是,把微处理器的地址、数据和控制信号线转换成外围支持接口芯片相应的信号线。具体任务如下:

 

    (1)提供外围接口芯片的选择信号,这个由I/O地址译码电路完成;

    (2)提供I/O读/写控制信号,这个由总线控制逻辑电路实现;

     (3)提供I/O数据传输方向控制信号,这个由数据总线收发器执行;

    (4)提供I/O写数据宽度的控制信号,这个由I/O存储器写控制逻辑电路完成;

 

 

 

③总线

 (一)地址总线

      用于寻址存储器的一个存储单元或者I/O设备的一个I/O端口(寄存器)。

 

如果寻址I/O,则地址总线包含0000h~FFFFh的16位I/O地址。16位I/O地址可以选择64K个不同的8位I/O设备。

 

如果寻址存储器,则地址总线包含存储器地址,地址总线宽度随着微处理器的不同而变化。16位微处理器寻址1MB存储器,使用20位地址选择00000H~FFFFFH之间的单元。32位微处理器寻址4GB存储器,用32位地址选择00000000h~FFFFFFFFh之间的单元。

 

(二)数据总线

用于在微处理器与它的存储器和I/O地址空间之间传输信息。Inter微处理器系列各个成员传输数据的宽度各不相同,从8位到64位宽。所有微处理器的存储器容量都按字节计算。

 

    8088有8位数据总线,一次传输8位数据;

    8086有16位数据总线,一次传输16位数据;

    32位微处理器一次传输32为数据;

 

较宽数据总线的优势在与能够提高数据传输的速度。

 

(三)控制总线

用于控制存储器或者I/O设备完成读/写操作,大多数微机系统都是有4条控制线:存储器读控制

存储器写控制、I/O写控制。控制信号是低电平有效。

 

例如:

    如果=0,则微处理器将通过数据总线向一个I/O设备写数据,并且该设备的地址出现在地址总线上。

 

微处理器读取一个存储单元的内容时,线通过地址总线发出一个存储器地址,然后发出存储器控制信号(),便从目的存储器读取数据,最后将从存储器读出的数据通过数据总线送到微处理器。当向存储器写时,按同理一次进行,区别是发出的是写操作控制信号,而数据则是通过数据总线从微处理器传出。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值