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:在硬件层次上接收和发送数据,能够完全控制特定的设备。

本章小结(依旧是直接粘贴过来)

Intel汇编语言程序设计学习-第二章 IA-32处理器体系结构-下的更多相关文章

  1. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  2. Intel汇编语言程序设计学习-第五章 过程-下

    5.3.3  库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复 ...

  3. Intel汇编语言程序设计学习-第三章 汇编语言基础-中

    3.2  例子:整数相加减 现在来看一个进行整数加减操作的汇编语言小程序.寄存器用于存放中间数据,我们调用一个库函数在屏幕上显示寄存器的内容.下面是程序的源码: TITLE Add and Subtr ...

  4. Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-下

    4.3  和数据相关的操作符和伪指令 操作符和伪指令并非机器可执行的指令,相反,它们是由汇编器进行解释的.开发者可以使用一系列的MASM操作符或伪指令获取数据的地址以及大小等特征信息: OFFSET操 ...

  5. Intel汇编语言程序设计学习-第三章 汇编语言基础-下

    3.4  定义数据 3.4.1  内部数据类型 MASM定义了多种内部数据类型,每种数据类型都描述了该模型的变量和表达式的取值集合.数据类型的基本特征是以数据位的数目量的大小:8,16,32,,48, ...

  6. Intel汇编语言程序设计学习-第三章 汇编语言基础-上

    汇编语言基础 3.1  汇编语言的基本元素 有人说汇编难,有人说汇编简单,我个人不做评价,下面是一个简单的实例(部分代码): main PROC mov  eax,5  ;5送EAX寄存器 add   ...

  7. Intel汇编语言程序设计学习-第六章 条件处理-上

    条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1  简介 本章,读者将看到高级条件分支如何翻译成底层的实现代 ...

  8. Intel汇编语言程序设计学习-第五章 过程-上

    过程 5.1  简介 需要阅读本章的理由可能很多: 1.读者可能想要学习如何在汇编语言中进行输入输出. 2.应该了解运行时栈(runtime stack),运行时栈是子过程(函数)调用以及从子过程返回 ...

  9. Intel汇编语言程序设计学习-第六章 条件处理-下

    6.6  应用:有限状态机 这个东西说了半天,感觉就是把逻辑弄得跟有向图一样,没看出来什么高端的东西,下面就整理下书上说的概念: 有限状态机(FSM,Finite-State Machine)是依据输 ...

随机推荐

  1. JSP原理剖析

    什么是JSP JSP长得和html没有区别,但是服务器会把jsp转换为servlet类 JSP(Java Server Page)Java服务器端页面,和Servlet一样,用于动态Web 在jsp之 ...

  2. 2018.8.30 nowcoder oi赛制测试1

    2018.8.30 nowcoder oi赛制测试1 普及组难度,发现了一些问题 A 题目大意:求斐波那契数列\(f(k-1)f(k+1)-f(k)^2\),范围极大 打表可得规律 其实是卡西尼恒等式 ...

  3. RateLimiter源码解析

    RateLimiter是Guava包提供的限流器,采用了令牌桶算法,特定是均匀地向桶中添加令牌,每次消费时也必须持有令牌,否则就需要等待.应用场景之一是限制消息消费的速度,避免消息消费过快而对下游的数 ...

  4. FZU_1608 Huge Mission 【线段树区间更新】

    一.题目 Huge Mission 二.分析 区间更新,用线段树的懒标记即可.需要注意的时,由于是在最后才查询的,没有必要每次更新都对$sum$进行求和.还有一点就是初始化的问题,一定记得线段树上每个 ...

  5. Hibernate学习实例

    一 Hibernate简介 Hibernate是一种Java语言下的对象关系映射(ORM)解决方案.为面向对象的领域模型到传统的关系型数据库的映射提供了一个使用方便的框架. 二 Hibernate设计 ...

  6. 关于github的使用学习心得

    先写先介绍一下如何用github上创建一个项目吧. 用户登录后的界面如上所示.右下角是我们已经建好的库.点击其中任何一个就可以查看相应的库了.如果要新建一个项目的话,就点击Start a projec ...

  7. 配置docker的pdflatex环境

    技术背景 Latex在文档撰写方面是不可或缺的工具,尤其是在写文章方面,是必须要用到的文字排版工具.但是latex的环境部署并不是一个特别人性化的操作,尤其是在各种不同的平台上操作是完全不一样的,还经 ...

  8. RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布

    现在,我们需要模拟传感器,生成数据,并发布到 RabbitMQ. 建立传感器项目 在 GOPATH src 下建立文件夹 sensors,使用 go mod init 初始化,并创建 main.go. ...

  9. QT项目-Chart Themes Example学习(一)

    1.main.cpp #include "themewidget.h" #include <QtWidgets/QApplication> #include <Q ...

  10. 80%的人都不会的,15个Linux实用技巧

    熟悉 Linux 系统的同学都知道,它高效主要体现在命令行.通过命令行,可以将很多简单的命令,通过自由的组合,得到非常强大的功能. 命令行也就意味着可以自动化,自动化会使你的工作更高效,释放很多手工操 ...