2.2 IA-32处理器体系结构
如前所述,IA-32是指始于Intel386直到当前最新的奔腾4的系列的处理器(额...这本书是什么时候写的啊,表示现在应该是I7啊),在IA-32的发展过程中,Intel处理器的内部体系结构已经做出了无数的改进,如流水线、超标量、分支预测以及超线程等。不过就编程而言。可见的变化只有用于多媒体处理以及用于图形计算的指令集扩展。
2.2.1 操作模式
IA-32处理器有三种基本的操作模式:保护模式、实地址模式和系统管理模式。另外一种模式称为虚拟8086模式,是保护模式的一个特例。
保护模式(Protected Mode):保护模式是处理器的基本模式,在保护模式下,所有指令和特性都是可用的,程序被赋予了独立的内存区域(称为段),处理器阻止程序访问已分配段之外的其他内存。
虚拟8086模式(Virtual-8086 Mode):在保护模式下,处理器可以在安全的多任务环境中执行地址模式的软件,如MS-DOS程序。换句话说,即使一个MS-DOS
程序崩溃了或试图想系统内存区写入数据,也不会影响同时运行的其他程序。Windows XP 可以同时执行多个虚拟8086任务。
实地址模式(Real-address Mode):实地址模式实现了Intel8086处理器的程序设计环境以及其他一些新增的特性,如却换到其他两种模式的能力等。该模式在WIndows98下是被支持的,可用于运行那些需要直接访问系统内存和硬件设备的MS-DOS程序。实地址模式下运行的程序有可能导致操作系统挂起(停止响应命令)。
系统管理模式(SSM ,System Management Mode):系统管理模式为操作系统提供了用以实现电源管理和系统安全等功能的机制。这些功能通常是由那些想自定义特定系统启动过程的计算机制造商实现的。
2.2.2 基本执行环境
地址空间
在保护模式下。IA-32处理器可访问高达4GB的内存,这是32位无符号二进制整数地址的能够寻址的上限。实地址模式程序只能访问1MB的内存。如果处理器处于保护模式并在虚拟8086模式下运行多个程序,每个程序都能访问独立的1MB内存区域。
基本寄存器
寄存器是CPU内部的高速存储单元,访问速度比常规内存快很多。例如
当循环进行速度优化时,就可以把循环计数存放在寄存器而不是(内存)变量中。
下图列出了所有的用于程序执行的基本寄存器,其中有8个通用寄存器,6个段寄存器,一个处理器状态标志寄存器(EFLAGS)和一个指令指针(EIP)寄存器。
通用寄存器:通用寄存器主要用于算术运算和数据的传输。如下图所示,每个寄存器都可以作为一个32位值或两个16位值来寻址使用。
某些16位的寄存器能按8位寻址使用。例如,32位的EAX寄存器的低16位称为AX,AX寄存器的高8位称为AH,地8位称为AL。EAX,EBX,ECX和EDX寄存器都有存在这种交迭的关系:
其余通用寄存器只有低16位有特别的名字,但是不能再进一步细分了。这里列出的16位寄存器通常在编写实地址模式程序时使用:
特殊用法:某些通用寄存器有些特殊用法。
1.EAX在乘法和除法指令中被自动使用。通常称为扩展累加寄存器。
2.在某些指令中,CPU自动使用ECX作为循环计数器。
3.ESP寻址堆栈(一种系统内存结构)上的数据,极少用于普通的算术和数据传输,通常被称之为扩展堆栈指针寄存器。
4.ESI和EDI由高速内存数据传送指令使用,通常称为扩展源指针和扩展目的指针寄存器。
5.高级语言使用EBP引用堆栈上的函数参数和局部变量。除非用于高级程序设计技巧中EBP一般不应该用于普通算术和数据传送。通常称为扩展帧指针寄存器。
...之后是每个寄存器都有介绍,不写了。需要的时候再查。
2.2.3 浮点单元
IA-32浮点单元(FPU)执行高速浮点算术运算。过去浮点单元需要一块独立的协处理器芯片。但从Intel486以后,FPU被继承了主处理器芯片中。FPU内有8个浮点数据寄存器,名为ST(0),ST(1)...ST(7),其余的控制和指针寄存器如图。
2.2.4 Intel微处理器的历史
Intel8086 Intel体系开端
Intel80286 ...
Intel80386 IA-32 引入32位寄存器、32位地址总线以及32位外部扩展数据通道。
Intel486 指令集的微结构采用流水线技术
奔腾 引入了MMX技术
P6处理器系列 Pro加入了提升指令执行速度的高级技术,奔腾2加入了MMX,奔腾3引入了SIMD(流扩展)技术,128寄存器。
奔腾4和至强(Xeon)系列 NetBurst微架构
2.3 IA-32的内存管理
IA-32处理器根据2.2.1节讨论的几种不同的基本操作模式对内存进行不同方式的管理。保护模式是最简单也是最强大的,其他模式通常仅在程序需要直接访问系统硬件是才使用。
在实地址模式下,处理器只能寻址1MB的内存空间,地址是从十六进制数的00000-FFFFF处理器一次只能运行一个程序,但可以随时打断(称为中断)程序的执行以便处理器来自外围设备的请求。应用程序能够读取和修改RAM(随机访问存储器)的任何区域,能够读取ROM(只读存储器)的任何区域但不能修改。MS-DOS操作系统运行于实地址模式下,Windows95/98可以启动或切换到该模式。
在保护模式下,处理器可同时运行多个程序,并为每个进程(运行的程序)分配4GB的内存。可以为每个程序分配属于自己的保留内存区域,一个程序不能访问其他程序的代码和数据。MS-Windows和Linux都运行于保护模式下。
在虚拟8086模式下,实际上是处理器在保护模式下创建了一个有1MB地址空间的虚拟机,虚拟机对运行于实地址模式下的80X86计算机进行模拟。例如,在Windows NT 和 Windows2000下,打开一个命令行窗口时就会创建一个8086虚拟机。可以同时运行很多这样的窗口,它们之间的行为不会相互影响。有一些直接访问计算机硬件的MS-DOS程序不能在Windows NT 和 Windows2000的虚拟8086模式下运行。
2.4 IA-32微机构成
2.4.1 主板
主板是微型计算机心脏,主板是一块印刷制电路板,上面安装了计算机的CPU、更能支持芯片组、住存储器、输入输出接口、电源插口以及扩展槽。这些不同的组件通过总线相互连接,总线是印制在主板上的一组电线。虽然主板种类很多。但是下面的一些部件是各个主板都具有的:
1.CPU插座。
2.内存插槽。
3.基本输入输出系统(BIOS)芯片,存放着系统软件。
4.CMOS内存,带一块可充电电池供电。
5.海量存储设备(如硬盘和CD-ROM等)的接口。
6.外部设备de USB接口。
7.键盘和鼠标接口。
8.PCI插槽,用于安装声卡、图形卡、数据采集器卡和其他输入输出设备。
下面是可选的
9.集成的声卡处理器。
10.并口和串口。
11.集成网卡。
12.告诉视频卡使用的AGP总线接口。
面是一个典型的IA-32系统中的一些重要的功能支持处理芯片:
1.浮点单元(FPU),处理浮点和扩展数运算。
2.8284/82C284时钟发生器,简称时钟,它以固定的频率产生脉冲。时钟发生器用于在CPU和计算机其余部件之间进行同步。
3.8259A可编程中断控制器(PIC),处理来自外部设备的中断。
4.8255可编程并口。
2.4.2 视频输出
略
2.4.3 存储器
基于Intel的系统使用集中基本类型的存储器:只读存储器(ROM),可擦写可编程只读存储器(EPROM),动态随机访问存储器(DRAM),静态随机访问存储器(SRAM),视频随机访问存储器(VRAM)以及互补金属氧化物半导体随机访问存储器(CMOS RAM): 详细介绍 略。
2.4.4 输入输出接口
通用串行总线(USB,Universal Serial Bus):通用串行总线接口为计算机和其他支持USB之间提供了智能、告诉的连接。USB2.0支持480MB/s的数据传输速率。USB接口可以连接单功能设备或多个共享同一USB接口的复合设备。
当设备通过USB与计算机相连时,计算机询问(枚举)设备以获取其设备名、设备类型以及其支持的驱动程序类型,这个过程称为美剧。计算机可以切断单个设备的电源,使设备处于挂起状态。
并口:大多数打印机都通过并行端口与计算机相连。术语“并行”意味着字节数据或字数据的所有位可以同时从计算机传送到设备,在通常不超过10英尺的较短距离内,数据可以非常快速(1MB/s)地传送、并行端口可以双向的,尽管目前打印机都使用USB接口了,告诉连接许多实验仪器和定制设备时并口依然很有用。
IDE:通常为智能驱动设备接口或驱动设备。IDE接口连接计算机和海量存储设备如硬盘、DVD以及CD-ROM等。计算机内几乎总是存在IDE接口。 当今的大部分设备实际上是并行ATA设备,这类设备的驱动控制器在设备内。带内奸控制逻辑的设备把CPU从内部逻辑的控制工作中解放出来了。另外一个相关的接口是SATA(串行ATA),提供了比并行ATA更高的数据传输速率。
FireWire:火线是一种高速外部总线标准,支持最高800MB/s的数据传输速率。
串口:RS-232串行端口每次发送一个二进制位,这导致其速度较并口和USB接口慢,但是这样使数据进行较远距离的传送成为可能。实验采集设备通常使用串口,调制解调器也是。
2.5 输入输出系统
2.5.1 所有这一切如何工作
应用程序通常从键盘和文件读取输入,并将输出写到屏幕或文件中。输入输出(I/O)不必通过直接访问硬件就能完成-相反,通过调用操作系统的功能函数就能完成。在不同的访问层次都可以进行I/O操作,这点类似于1章中简述的虚拟机的概念。有三种基本的访问层次:
高级语言功能函数:诸如C++或JAVA之类的高级程序设计语言包含了执行输入输出的函数。这些功能函数是可移植的,能够在多种不同的计算机系统上工作并且不依赖于任何一个操作系统。
操作系统:程序员可以通过API调用操作系统的功能函数。才做系统提供了一些高级操作,如写字符串到文件、从磁盘读取字符串以及分配内存块等。
BIOS(基本输入输出系统):是直接同硬件交互的子程序的集合。BIOS是由计算机制造商安装的,统计算机硬件相匹配。操作系统通常同BIOS通信。
设备驱动程序:如果计算机安装了BIOS不能识别的新设备,会发生什么?当操作系统引导的时候,它加载一个设备驱动程序,设备驱动程序中包含了同设备通信的功能函数。设备驱动程序工作起来与BIOS非常相似,它为特定的设备或一类设备提供了输入输出的功能。
应用程序在屏幕上显示一个字符串步骤如下:
1.一条应用程序语句调用一个高级语言库函数向标准输出上写字符串。
2.库函数(层次3)调用一个操作系统函数,传递一个字符串指针。
3.操作系统函数(层次2)接入一个循环,循环中调用BIOS的某个子例程,向它传递每个字符的ASCII码及其颜色,操作系统调用另外一个BIOS子程序把光标前前进到屏幕的下一个字符要显示的位置。
4.BIOS子例程(层次1)接收每个字符,映射特定的系统字体,然后把字符送至与视频控制卡相连的硬件端口。
5.视频控制卡(层次0)定时产生硬件信号给视频显示以控制光栅扫描和像素显示。
在多个层次上进行编程:在输入输出程序设计领域,汇编语言的能力和灵活性更大,汇编语言可以从下面的访问层次中进行选择。
层次3:调用库函数执行通用的文本I/O和基于文件的I/O。
层次2:调用操作系统函数执行文本I/O和基于文件的I/O。
层次1:调用BIOS功能控制与设备相关的特性。
层次0:在硬件层次上接收和发送数据,能够完全控制特定的设备。
本章小结(依旧是直接粘贴过来)