80386的寄存器组成
80386重要寄存器和数据结构
80386重要寄存器和数据结构描述符(Descriptor)具有固定长度的结构体(struct),共8个字节。
这个结构体保存着一个段基地址的所有信息,包含:1.段基地址2.段长度3.段属性描述符有两种,这两种结构体包含的内容几乎都一样,只有一些细小的差别,这两种描述符分别是:1.非系统描述符:用来描述数据段,代码段和堆栈段的结构;2.系统段描述符:用来描述LDT和TSS的,(LDT和TSS在后面有说明)。
全局描述符表(GDT: Global Descripter Table)顾名思义,它是一个表结构。
这个表存储在内存中,相当于C语言中的一个结构体数组。
数组的每一项就是上面所说的描述符。
GDT在一个多任务系统中一般只设置一个,其基址由一个GDTR确定(GDT靠GDTR定位),GDT地址在设置好之后几乎不会被改变。
这个表中可以包含如下四种信息的描述符:1.全局数据段,代码段和堆栈段信息。
这些段一般由操作系统内核使用。
2.对LDT的描述,这个描述符的基址就是是LDT所在内存中的起始地址3.对TSS的描述,这个描述符的基址是TSS所在内存中的起始地址4.一些门描述符(调用门,中断门等…)。
其中#1属于非系统段描述符,#2 #3 #4属于系统段描述符。
描述符各自的属性值决定了它们具体是哪类描述符。
其中,LDT,TSS属于具体每个任务,一般成对出现在GDT中。
全局描述符表寄存器(GDTR:Global Descripter Table Register)GDTR是一个CPU寄存器,和AX BX.. CS DS...一个概念。
GDTR共48位,包含两部分内容:1.开头32位用来保存一个内存地址,指出GDT在内存中的位置(如果没有开启分页,它就是一个32位的物理地址);2.随后16位为GDT的长度信息,即GDT共有有多少项。
局部描述符表(LDT:Local Descripter Table)与GDT的结构类似,所不同的是,LDT用来描述每个具体用户任务代码段,堆栈段和数据段信息。
5.现代微机结构_80386
引脚ERROR
1: 表示是80287, 或者无协处理器
通过执行指令来识别: 指令1 FNINIT 指令2 IN (控制寄存器)
区分有无协处理器 Di
R +5V
若读出的值为0, 则将1→MP, 0→ET 若读出的值为不为0, 则0→MP
(2) CR1: 未使用 (3) CR2: 页故障地址寄存器, 存放出现故障的页 的32位线性地址 (4) CR3: 页目录基地址寄存器, 存放页目录表的 基地址。
二级表的地址转换过程:
将虚拟地址的高20位分成两部分, 分别用于指示 两种不同表的表项(作为表内的偏移量)。 如下图所示:
31 22 21 12 11 0
线性地址 页目录偏移
页表偏移
页内偏移
D31~D22指示1024个目录项的一项, 该项的
内容为一个页表的基地址;
D21~D12指示1024个页表项的一项, 该项的内
2、分页管理
CR0中的PG位=0, 不允许分页, 经分段部件出来 的地址(即线性地址=物理地址);
如果PG=1, 则允许分页, 经分段部件出来的线性地 址仍为虚地址, 必须经分页部件转换成物理地址。
(1) 分页的寻址过程 从虚地址到实地址的转换过程 目标: 根据线性地址, 得到物理页面基地址以及 该页面内的偏移量 假设: 基于简单查表的转换机构, 用虚拟页号查表, 表中内容为实际页面的基地址 如下图所示:
SRAM
OE WE CS
D7~D0
SRAM BE0 BE1 BE2
OE WE CS
D15~D8
SRAM
OE WE CS
D23~D16
BE3
地址 地址 译码
SRAM
80386的特殊寄存器
状态和控制寄存器状态和控制寄存器是由标志寄存器EFLAGS 、指令指针EIP 和4个控制寄存器组成,如图所示:1.指令指针寄存器和标志寄存器指令指针寄存器EIP 中存放下一条将要执行指令的偏移量(offset ),这个偏移量是相对于目前正在运行的代码段寄存器CS 而言的。
偏移量加上当前代码段的基地址,就形成了下一条指令的地址。
EIP 中的低16位可以分开来进行访问,给它起名叫指令指针IP 寄存器,用于16位寻址。
标志寄存器EFLAGS 存放有关处理器的控制标志,如图所示。
标志寄存器中的第1、3、5、15位及18~31位都没有定义。
标志寄存器EFLAGS在这些标志位中,我们只介绍在Linux 内核代码中常用且重要的几个标志位:第8位TF (Trap Flag )是自陷标志,当将其置1时则可以进行单步执行。
当指令执行完后,就可能产生异常1的自陷(参看第四章)。
也就是说,在程序的执行过程中,每执行完一条指令,都要由异常1处理程序 (在Linux 内核中叫做debug())进行检验。
当将第8位清0后,且将断点地址装入调试寄存器DR0~DR3时,才会产生异常1的自陷。
第12、13位IOPL 是输入输出特权级位,这是保护模式下要使用的两个标志位。
由于输入输出特权级标志共两位,它的取值范围只可能是0、1、2和3共4个值,恰好与输入输出特权级0~3级相对应。
但Linux内核只使用了两个级别,即0和3级,0表示内核级,3表示用户级。
在当前任务的特权级CPL(Current Privilege Level)高于或等于输入输出特权级时,就可以执行像IN、OUT、INS、OUTS、STI、CLI和LOCK等指令而不会产生异常13(即保护异常)。
在当前任务特权级CPL为0时,POPF(从栈中弹出至标志位)指令和中断返回指令IRET可以改变IOPL字段的值。
第9位IF(Interrupt Flag)是中断标志位,是用来表示允许或者禁止外部中断(参看第四章)。
80386 和 保护模式
80386 和保护模式___William LiuIntel CPU 一般可以运行在两种模式之下,即实模式和保护模式。
早期的 Intel CPU ( 8086 , 8088 )只能工作在实模式之下,系统中只能运行单个任务,而且只能使用实地址模式。
对于 Intel 80386 以上的芯片则还可以运行在 32 位的保护模式之下。
在保护模式之下的 CPU 可以支持多任务;支持 4GB 的物理内存;支持 64TB 的虚拟内存;支持内存的页式管理和段式管理以及支持特权级。
本文档将首先介绍 Intel 80386 CPU 的几个内部寄存器,然后再由浅入深的分别介绍保护模式下的段式管理,页式管理,虚拟内存,多任务以及特权级管理等几个方面。
Intel 80386 CPU 的内部寄存器这一部分先大致介绍一下 386 的内部寄存器,具体细节在后面的几节中再详细说明。
一般来说, CPU 设计用来系统编程的系统寄存器包括如下几类:•标志寄存器 (EFLAGS)•内存管理寄存器 (GDTR , LDTR , IDTR , TR)•控制寄存器 (CR0 , CR1 , CR2 , CR3 , CR4)•兼容 8086 通用寄存器( EAX , EBX , ECX , EDX )•兼容 8086 段寄存器( CS , DS , ES , SS , FS , GS )•兼容 8086 数据寄存器( ESI , EDI , EIP , ESP )下面分别加以介绍:1) 标志寄存器 EFLAGS :跟 8086/8088 的 FLAGS 大致差不多。
只不过位宽由 16bit 变成了 32bit ,负责的状态标志也多了一些。
见图一所示:图一: EFLAGS 的结构其中系统标志: VM -虚拟 8086 模式; RF -恢复标志; NT -任务嵌套标志;IOPL - I/O 特权级标志; IF -中断允许标志。
2) 内存管理寄存器:一共有 4 个,用于分段内存管理,都是用于存放指针的,只是所指的再内存单元中的内容有所不同。
第二章 32位微处理器80386结构讲解
CS DS SS ES FS GS
0 AL 累加器 BL 基址寄存器 CL 计数器 DL 数据寄存器
堆栈指针 基址指针 源变址 目的变址
指令指针 标志寄存器
代码段 数据段 堆栈段 附加段 附加段 附加段
80386~Pentium Pro 的基本寄存器
24
(1)通用寄存器
8个32位通用寄存器EAX、EBX、ECX、EDX、 ESP、EBP、ESI、EDI都是由8086/8088中的8个 16位通用寄存器扩展位数而来,它们的低16位可以 独立存取,以便与8086/8088兼容,名称分别称为 AX、BX、CX、DX、SP、BP、SI和DI。其中前4 个寄存器还可进一步分别分为两个8位寄存器,分别 称为AH、AL,BH、BL,CH、CL,DH和DL。
8
计算机流水线一般分为指令流水线和运算流水线 两种。
80年代初出现RISC后,即把流水线技术作为首选 技术,在RISC中最初的目标是每个时钟周期执行1 条指令,后来提出在1个时钟周期执行多条指令的 目标,于是便出现了超流水线 (Superpipelined)、超标量(Superscalar)等 体系结构。
1. 有关技术名词简介
• CISC和RISC CISC是复杂指令集计算机(Complex
Instruction Set Computer)的英文缩略 语。是指以微程序为基础、具有较复杂指令 系统的计算机
2
在60年代到80年代初期这一阶段中,以微程序控 制器为基础的处理机占主流地位,IBM公司从60 年代初开始把计算机产品系列化并做到软件兼容后, 处理机体系结构设计中采用微程序技术作为控制指 令执行的控制器的基础,在当时是比较适合的。因 为在一个产品系列中,低档机指令系统中的指令的 基本操作,可以以微程序方式存放在微存储器中 (只读存储器),这个微存储器称为“核”。
《微机原理与接口技术(80386-Pentium)》-第3章80486系统原理
标志寄存器中的位17是虚拟8086方式位 VM 标志寄存器中的位16是恢复标志位RF 标志寄存器中的位16是恢复标志位RF 标志寄存器中的位14是嵌套任务标志NT 标志寄存器中的位14是嵌套任务标志NT 标志寄存器中的位13、位12是输入/输出 特权级标志位IOPL 溢出标志位11F
3.1.3 80486微体系结构
80486微处理机的微体系结构包括有9个功能部件, 它们分别是: ①总线接口部件。 ②片内高速缓冲存储器Cache。 ③指令预取部件。 ④指令译码部件。 ⑤控制部件。 ⑥整数运算和数据通路。 ⑦浮点部件。 ⑧分段部件。 ⑨分页部件。
12
4.段寄存器
80486 配备有6个16位的段寄存器,段寄存器 也叫选择符 (Selector)。它们的名字和用途 与80386 的一样,其名称分别是: 代码段寄存器 CS 数据段寄存器 DS 堆栈段寄存器 SS 附加数据段寄存器 ES 附加数据段寄存器 FS 附加数据段寄存器 GS
2
3.1.1 寄存器组
Intel为了在代码级向上兼容,80486微处理机 在硬件设计上,在许多地方与80386微处理机 都保持兼容。 80486微处理机所具有的寄存器种类和数量都 非常多。它的寄存器既有80386微处理机中使 用的全部寄存器,又有80387数值协同处理器 中使用的各种寄存器。80486• 处理机的寄存 微 器种类可分为以下几种:
7
3.标志寄存器EFLAGS
80486的标志寄存器是一个32位寄存器,如图3.3所 示。它的作用是用来存放有关80486微处理机的状态 标志信息、控制标志信息以及系统标志信息。 80486的状态标志信息报告的是算术运算类指令在执 行完之后的机器状态。控制标志仅有一个即DF标志, 用来控制串操作过程中执行方向问题,即是给目标变 址寄存器EDI、源变址寄存器EDI、源变址寄存器 ESI 增值还是增负值(减值)问题。系统标志信息用来控 制输入/输出、屏幕中断、调试、任务转换和控制保 护模式与虚拟8086模式间的转换等操作。 对绝大多数系统来说,若通过应用程序改变系统标志 寄存器中的标志状态,都将引起一个异常事故出现。 拿80486的标志寄存器与 80386的标志寄器进行比较 后会发现,二者几乎完全一样。 8
汇编学习笔记(15)-80386从16位32位
汇编学习笔记(15)-80386从16位32位简述 80386相⽐于8086 地址线从20位扩展为32位,这意味着80386可以最多访问4G的内存,同时所有的寄存器都扩展为32位寄存器,80386扩展了原来的寄存器,增加了⼀些新的指令,并增加了新的寄存器 80386的寄存器主要分如下⼏类:通⽤寄存器,段寄存器,指令寄存器,标志位寄存器,系统地址寄存器,控制寄存器,测试寄存器,调试寄存器。
80386的指令集也⼤多集成8086的指令集,只是将其扩充为32位寄存器⽽已。
寄存器通⽤寄存器通⽤寄存器是在8086的8个通⽤寄存器(AX,BX,CX,DX,BP,SP,SI,DI)的基础上将其扩展了32位寄存器,名称为在原先的名字前⾯加了个E,分别为EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI原先的16位和8位寄存器即 AX, AL ,AH等都还是可以使⽤的,同时AX 是EAX的低16位,类似于 AX和AL的关系,EAX的⾼16位⽆法单独使⽤。
段寄存器原先的段寄存器保持不变还是16位,同时增加了FS 和 GS两个新的段寄存器(这两寄存器的全称是啥没查到)指针寄存器扩展为32位,改名为EIP,IP仍然有效,是EIP的低16位标记寄存器标志寄存器也扩展为32位,并层架如下四个标志位 IO 特权(IOPL): 当执⾏IO指令的时候需要IO的特权级⼩于等于此标志位,占2位 嵌套任务标志(NT): ⽤来指⽰中断返回指令 IRET的⼯作⽅式 重启标志(RF): 与故障和调试有关 虚拟8086标志(VM): 表⽰当前⼯作在虚拟8086模式下控制寄存器R0:PG: 分页控制 PG=1: 启⽤内存的分页管理模式 PG=0: 禁⽤内存的分页管理模式PE: 分段控制 PE=1: 启⽤内存的分段管理模式, 同时进⼊保护模式 PE=0: 禁⽤内存的分段管理模式, 同时进⼊实模式MP: 算数存在位EM: 模拟位EM=0: 硬件执⾏浮点指令运算EM=1: 软件模拟浮点执⾏运算TS: 任务切换位ET: 扩展位R1: 保留未使⽤R2: 缺页中断时存储缺的页的地址R3: 页⽬录的地址,只能⽤前20位,后20位必须为0,所以是4K对齐的系统地址寄存器先简单介绍⼀下,在下⼀章会详细介绍他们GDTR: 全局表描述符表寄存器 48位,存放全局段描述符表的地址,前32位存放基地址,后16位是表界限,单位1字节。
80386保护模式工作原理
DPL
TYPE
描述符表
描述符可用于描述多种对象:存储段、任务状态 段、调用门、任务门、中断门、陷阱门和LDT。 为了便于组织管理,80386把描述符组织成线性表。 由描述符组成的线性表称为描述符表。 每个描述符表本身形成一个特殊的内存数据段。 这样的特殊数据段最多包含8192个描述符。该段 由操作系统维护、并由处理器中的存储管理单元 硬件(MMU)访问。 在80386中有三种类型的描述符表:全局描述符表 GDT、局部描述符表LDT 和 中断描述符表IDT。 在整个系统中,全局描述符表GDT和中断描述符 表IDT只有一张,局部描述符表可以有若干张,每 个任务有一张。
两级页表结构
表项格式
P位表示该表项是否有效。P=1表项有效;P=0表项无效。 在通过页目录表和页表进行地址转换过程中,无论在页目 录表还是在页表中遇到无效表项,都会引起缺页异常。 处理器在访问过某个表项之后总是将其A位置1。一般由操 作系统将其周期性的刷新为0。 处理器在对某个物理页进行过写操作之后,总是将其所对 应的页表中表项的D位置1。 U/S和R/W位用于对页进行保护。
对输入/输出的保护
80386采用I/O特权级IPOL和I/O许可位图的方法来控制输入 /输出,实现输入/输出保护。 IOPL存放在标志寄存器EFLAG中,它规定了可以执行所有 与I/O相关的指令和访问I/O空间中所有地址的最低特权级。 只有当CPL <=IOPL时,才被允许随意访问I/O空间中的任 何地址。 每个任务都有一个I/O许可位图,它由二进制位串组成。位 串中的每一位依次对应一个I/O地址。 I/O许可位图存放在 每个任务所对应的任务状态段(TSS)中。 当CPL > IOPL时,如果该指令所访问的I/O地址所对应的当 前任务的I/O许可位为0,则80386允许该I/O操作,如果I/O 许可位为1,则禁止该I/O操作。 IOPL的设置和I/O许可位图的创建只能由操作系统进行。
80386保护模式工作原理
DPL
TYPE
描述符表
描述符可用于描述多种对象:存储段、任务状态 段、调用门、任务门、中断门、陷阱门和LDT。 为了便于组织管理,80386把描述符组织成线性表。 由描述符组成的线性表称为描述符表。 每个描述符表本身形成一个特殊的内存数据段。 这样的特殊数据段最多包含8192个描述符。该段 由操作系统维护、并由处理器中的存储管理单元 硬件(MMU)访问。 在80386中有三种类型的描述符表:全局描述符表 GDT、局部描述符表LDT 和 中断描述符表IDT。 在整个系统中,全局描述符表GDT和中断描述符 表IDT只有一张,局部描述符表可以有若干张,每 个任务有一张。
GDT和LDT
GDT含有每一个任务都可能访问的描述符,通常包含操作 系统所使用的代码段、数据段和堆栈段的描述符,也包含 多种特殊描述符,如LDT描述符。在任务切换时,并不切 换GDT。通过GDT可以使各任务都需要的段能够被共享。
每个任务的局部描述符表LDT含有该任务自己的代码段、 数据段和堆栈段的描述符,也包含该任务所使用的一些门 描述符,如任务门和调用门描述符等。随着任务的切换, 系统当前的局部描述符表LDT也随之切换。通过LDT可以 使各个任务私有的各个段与其它任务相隔离,从而达到受 保护的目的。
两级页表结构
页映射表的第一级称为页目录表,存储在一个4K字节的物 理页中。页目录表共有1K个表项,其中,每个表项为4字 节长,包含对应第二级表所在物理地址空间页的基地址。 页映射表的第二级称为页表,每张页表也安排在一个4K字 节的页中。每张页表都有1K个表项,每个表项为4字节长, 包含对应物理地址空间页的基地址。 由于页目录表和页表均由1K个表项组成,所以使用10位的 索引就能指定具体表项,即用10位的索引值乘以4加基地址 就得到了某个表项的物理地址。 任务切换时,页目录表和页表也要相应进行切换,使得不 同任务的线性地址空间被映射到不同的物理地址空间中。 当前页目录表的物理基地址存放在CR3寄存器中。
80x86 保护运行模式
80x86 保护运行模式80386 概述80386 是一个高级的32 位微处理器,专门用于多任务的操作系统,并为需要高性能的应用所设计。
32位的寄存器和数据通道支持32 位的寻址方式和数据类型,处理器可以寻址最高可达4GB 的物理内存以及64TB(246字节)的虚拟内存。
芯片上的内存管理包括地址转换寄存器、高级多任务硬件、保护机制以及分页虚拟内存机制。
下面针对系统编程,概要说明使用80386 的这些基本原理。
系统寄存器设计用于系统编程的系统寄存器主要包括以下几类:标志寄存器EFALGS;内存管理寄存器;控制寄存器;调试寄存器;测试寄存器。
系统标志寄存器EFLAGS 控制着I/O、可屏蔽中断、调试、任务切换以及保护模式和多任务环境下虚拟8086 程序的执行。
其中主要标志见下图所示。
31 23 15 7 00 0 0 0 0 0 0 0 0 0 0 0 O 0VMRFNTIOPLOFDFIFTFSFZFAFPF1CF其中系统标志:VM –虚拟8086 模式;RF –恢复标志;NT –嵌套任务标志;IO PL – I/O 特权级标志;IF –中断允许标志。
内存管理寄存器有4 个,用于分段内存管理:GDTR –全局描述符表寄存器(Global Descriptor Table Register);LDTR –局部描述符表寄存器(Local Descriptor Table Register);IDTR –中断描述符表寄存器(Interrupt Descriptor Table Register);TR –任务寄存器。
其中前两个寄存器(GDTR,LDTR)分别指向段描述符表GDT 和LDT。
IDTR 寄存器指向中断向量表。
TR 寄存器指向处理器所需的当前任务的信息。
80386 共有4 个控制寄存器,分别是CR0、CR1、CR2 和CR3。
格式见下图所示。
31 23 15 7 0页目录基地址寄存器Page Directory Base Register (PDBR)保留ReservedCR3附录465页异常线性地址Page Fault Linear AddressCR2保留ReservedCR1PG保留ReservedETTSEMMPPECR0控制寄存器CR0 含有系统整体的控制标志。
Intel80386CPU
Intel80386CPU⼀、80386 概述80386处理器被⼴泛应⽤在1980年代中期到1990年代中期的IBM PC相容机中。
这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。
80386的⼴泛应⽤,将PC机从16位时代带⼊了32位时代。
80386的强⼤运算能⼒也使PC机的应⽤领域得到巨⼤扩展,商业办公、科学计算、⼯程设计、多媒体处理等应⽤得到迅速发展。
它的数据总线和地址总线都是32位,直接寻址的内存空间4GB,虚拟地址空间为64TB。
芯⽚上集成了27.5万个晶体管,主频16-33MHz。
它是X86第⼀个真正的32位CPU,它能提供真正的多任务处理和建⽴虚拟系统的能⼒。
⼆、80386的引脚及功能80386 DX有132根引脚,采⽤PGA(Pin Grid Array,引脚⽹格阵列)封装,采⽤这种封装⼯艺单根引脚所占⽤的⾯积较双列直插时⼩,因此引脚数⽬可以多⼀些,不必再采⽤引脚复⽤技术。
因此,在80386中数据线和地址线是分开设置的,控制信号和状态信号也不再复⽤引脚。
其中34 条地址线(A31~A2、BE3~BE0),32 条数据线(D31~D0),3 条中断线,1条时钟线,13 条控制线,20 条电源线VCC,21条地线VSS,还有8 条为空。
与8086/8088 相⽐,需要说明以下⼏点:1)时钟( CLK2): 80386 的基本定时信号由CLK2 提供。
CLK2 的频率是80386 内部时钟信号频率的两倍,输⼊该信号与82384 时钟信号同步,经80386 内部2 分频之后得到80386 的⼯作基准频率信号。
2)数据总线(D31~D0):为80386 和其他设备之间提供数据通路,32 位数据总线,双向三态,⼀次可传送8 位、16 位或32 位数据,由输⼊信号(BE3~BE0)和BE16确定。
在任何写操作周期(包括暂停周期和停机周期),80386 总是驱动数据总线的所有32 位信号,⽽不管当前总线的实际宽度。
汇编语言8086和8088中寄存器
1980年代,汇编语言8086和8088在个人电脑中广泛应用。
这两种语言使用16位和8位寄存器,这些寄存器是编程中不可或缺的组成部分。
接下来我将根据这两种汇编语言的寄存器,深入探讨其特性和用途,帮助你全面了解这一主题。
一、汇编语言8086和8088中寄存器的基本概念在汇编语言8086和8088中,寄存器是一种保存数据的特殊存储器。
它们用于存储指令中的临时数据和位置区域。
这两种汇编语言使用的寄存器包括通用寄存器、段寄存器和指令指针寄存器。
通用寄存器用于存储操作数和中间结果,段寄存器用于存储内存访问的段位置区域,指令指针寄存器用于存储当前执行指令的位置区域。
二、8086和8088中的通用寄存器1. AX寄存器AX寄存器是一个16位的累加器,用于存储算术运算的结果。
在8086和8088中,它可以分为AH和AL两个8位寄存器,分别存储较高位和较低位的数据。
2. BX寄存器BX寄存器是一个16位的基址寄存器,用于存储数据的基址。
在8086和8088中,它也可以分为BH和BL两个8位寄存器。
3. CX寄存器CX寄存器是一个16位的计数寄存器,用于存储循环次数。
在8086和8088中,它可以分为CH和CL两个8位寄存器。
4. DX寄存器DX寄存器是一个16位的数据寄存器,用于存储I/O端口的数据。
在8086和8088中,它也可以分为DH和DL两个8位寄存器。
三、8086和8088中的段寄存器1. CS寄存器CS寄存器是一个16位的代码段寄存器,用于存储当前执行代码段的基位置区域。
在8086和8088中,它存储着指向当前代码段的位置区域。
2. DS寄存器DS寄存器是一个16位的数据段寄存器,用于存储当前数据段的基位置区域。
在8086和8088中,它存储着指向当前数据段的位置区域。
3. SS寄存器SS寄存器是一个16位的堆栈段寄存器,用于存储当前堆栈段的基位置区域。
在8086和8088中,它存储着指向当前堆栈段的位置区域。
80386的寄存器组成
80386共提供7种类型的32位寄存器,如下:1.通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)2.段寄存器(CS、SS、DS、ES、FS、GS)3.指令指针寄存器和标志寄存器(EIP、EFLAGS)4.系统表寄存器(GDTR、IDTR、LDTR、TR)5.控制寄存器(CR0、CR1、CR2、CR3、CR4)6.调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)7.测试寄存器(TR6、TR7)其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。
下图是前四类寄存器的大致示意图:本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。
一、通用寄存器一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。
这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。
二、段寄存器80386比8086/80286增加了两个段寄存器FS、GS。
除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。
每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。
三、指令指针寄存器和标志寄存器指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。
标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。
80386微处理器
•
•
•
每当任务切换时,处理器将把TS置为1。 MP——监控协处理器位 MP为1时,表示有协处理器在工作。 EM——模拟协处理器控制位 EM为1时,表示用软件仿真协处理器。 ET ——协处理器扩展类型 0:80287协处理器;1:80387协处理器;
2.CR2 ——控制寄存器2 CR2称为页面故障线性地址寄存器,用于发生页面 访问异常时报告出错信息。 3. CR3 ——控制寄存器3 CR3称为页组目录基址寄存器,用于存放页目录表 的物理基地址。如下图所示。(分页时用到)
•
物理地址 页式管理机构不工作时,物理地址 = 线性地址;
页式管理机构工作时,物理地址 = F(线性地址)
分段管理
为了实现分段管理,80386把有关段的 信息存放在一个称为段描述符(简称描述
符)的8个字节长的数据结构中,并把系统
中所有的描述符编成一张表,以便硬件查 找和识别。 80386共设置了3种描述符表,即全局 描述符表GDT、局部描述符表LDT和中断
四、80386 的三种工作模式
80386有3种工作模式:
实地址模式(Real Address Mode),简称为 实模式; 保护虚拟地址模式(Protected Virtual Address Mode),也叫保护模式; 虚拟8086模式(Virtual Address 8086 Mode),简称为V86模式。
任务寄存器(TR) (图9.6)
例3.假设GDT的基地址为00011000h,TR = 3208h,问TSS 描 述符的地址范围?
解:TR = 0011001000001000 TI = 0, TSS描述符在GDT中 索引 = 0011001000001 TSS描述符的起始地址: GDT的基地址+索引×8 = 00011000h+ 0011001000001×8 = 00014208h TSS描述符的地址范围(占8字节): 00014208h ~ 0001420Fh
Intel 80386处理器简介
目录第一章 80386简介 (2)1.1Intel 80386处理器 (2)1.2存储管理机制 (2)1.3保护机制 (4)1.4控制寄存器和系统地址寄存器 (6)第二章存储管理 (10)2.1地址映射过程 (10)2.2虚拟地址到线性地址的转换 (11)2.3线性地址到物理地址的转换 (12)第三章中断,异常和系统调用 (16)3.1 80386的中断机制 (16)3.2 8259A中断控制器 (20)3.3 80386的时间机制 (23)3.4 时钟中断 (24)附录 IBM PC兼容机 (25)附录引导程序 (26)参考文献 (26)第一章 80386简介1.1 Intel 80386处理器Intel 80386系列处理器是32位处理器,有3种工作方式:实模式,保护模式和虚拟8086模式。
复位后处于实模式下。
由于虚拟8086模式主要用于兼容8086下应用程序,本文不做介绍,感兴趣可以参考《Linux内核源代码情景分析》。
实模式下,80386处理器将兼容8086处理器,而且功能更多,如32位的寄存器。
但是,实模式下的80386没有存储保护,特权检查的机制,不足以支持现代操作系统。
只有在保护模式下,才能完全发挥80386的功能。
下文在提到80386时,如没有特别说明,都是指保护模式下的80386。
下面简单介绍一下保护模式下80386的特性:在保护方式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间;扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;支持多任务,能够快速地进行任务切换和保护任务环境;4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离。
1.2 存储管理机制为了对存储器中的程序及数据实现保护和共享提供硬件支持,为了对实现虚拟存储器提供硬件支持,在保护方式下,80386不仅采用扩充的存储器分段管理机制,而且提供可选的存储器分页管理机制。
3现代微机结构-8086及80286
理 器
器 存储器 存储器 I/O
AD15~AD0 双向
DT/R DEN
数据 锁存 器
第二节 Intel 80286
与8086的显著区别:
1. 地址线和数据线不再分时复用, 简化了硬件设计;
2. 增加了地址线的宽度, 物理地址空间增加到16M 3. 增加了新的指令, 以增强其控制能力。 4. 引入存储管理中的虚存管理机制。通过“虚地址”
结论:
采用地址流水线后, 由于地址信号的提前建立, 与非地址的流水线相比, 可以尽量减少插入Tw 等待周期。因而加快了访存速度。 (但并没有提高存储器的速度)。
四、80286的工作模式
(一) 实地址模式
系统开机复位时,自动进入实地址模式, A23~A20自 动置为0, 以 A19~A0寻址1M的存储空间。
实地址模式下的寻址过程:
段基地址
段基地址 0000
+ 20位物理地址 内存单元
偏移量
为实施“虚地址保护”所希望的寻址过
程:
应用设计 者给出的 虚地址
• 实施保护 • 实现虚地址到
物理地址
内存单元
实地址的转换
“虚地址保护” 实施的中间平台
“ 中 间 平 台 ” 的 核 心 部描述子 (Descriptor) 分描:述子的作用:
(物理地址)
左移4位
偏移量 基地址
…
15
0 15
0ห้องสมุดไป่ตู้
段寄存器
偏移量
19
0
一 个
16位基地址 0000
段
+
20位的物理地址
外部地址总线
三、8086的中断系统
(一) 中断源
1、外部中断
80X86寄存器及存储器结构介绍
二、段寄存器
CS:代码段寄存器
SS:堆栈段寄存器 DS:数据段寄存器 ES:附加段寄存器 IP:指令指针寄存器 与CS一起指向程序中下一条要执行的指令 FLAG:标志寄存器
三、控制寄存器
16位的寄存器,其中9个位是标志位,代表了系统运行 的状态。
80X86寄存器
湖南大器,也称栈顶指针。与堆栈段寄存器SS一起 寻址栈顶单元。 BP:基址指示器。常与SS一起寻址堆栈中的非栈顶单元。
3、变址寄存器
SI:源变址寄存器 DI:目的变址寄存器
它们常用于串操作,当然也可存放数据。
80X86寄存器
湖南大学 赵欢 hzhao@ 3
8088存储器结构
湖南大学
赵欢 hzhao@
7
DF、IF、TF不受算逻指令影响,有专门的方式置/复位;
DF:方向标志 DF=1,串操作为自动地址减量方式 =0,串操作为自动地址增量方式 IF:中断标志 IF=1,开中断;IF=0,关中断 TF:追踪标志 DF=1,CPU为单步执行方式;DF=0,CPU为连续执行方式
湖南大学 赵欢 hzhao@ 5
80X86寄存器
8088有20根地址线,8根数据线。 基本内存配置 具有:220=1M个内存单元 每个单元:8 bits
与地址有关的寄存器CS、SS、DS、ES、IP、SP
BX、BP、SI、DI均是16位的。
16位的寻址能力如何访问1MB的空间?
8088存储器结构
湖南大学 赵欢 hzhao@ 6
FLAG寄存器的各个位
15 12 11 10 9 IF 8 7 6 ZF 5 4 AF 3 2 PF 1 0 CF OF DF TF SF
80386控制寄存器和系统地址寄存器
80386控制寄存器和系统地址寄存器如下表所示。
它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。
控制寄存器CRxBIT31BIT30—BIT12BIT11—BIT5BIT4BIT3BIT2BIT1BIT0CR0PG0000000000000000ETTSEMMPPECR1保留CR2页故障线性地址CR3页目录表物理页码080386控制寄存器和系统地址寄存器如下表所示。
它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。
<一>控制寄存器从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。
但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。
CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。
CR2及CR3由分页管理机制使用。
CR0中的位5—位30及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。
控制寄存器CR0的低16位等同于80286的机器状态字MSW。
1.保护控制位控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。
PE控制分段管理机制。
PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。
PG控制分页管理机制。
PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。
关于分页管理机制的具体介绍在后面的文章中进行。
下表列出了通过使用PE和PG位选择的处理器工作方式。
由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。
PE=0且PG=1是无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。
3-2 80x86处理器的内部寄存器
8086处理器的内部寄存器回顾:8086的内部结构DS ES SS CS数据暂存器FLAGs 标志寄存器执行部件控制电路AX BX CX DXAH BH CH DHSI DI BP SPAL BL CL DL寄存器组地址加法器运算器地址加法器IP数据总线控制总线地址总线指令译码器指令队列总线接口控制电路指令寄存器执行单元Execution Unit(EU)总线接口单元Bus Interface Unit (BIU)8086处理器的内部寄存器⏹在8086/8088内部共有14个16位寄存器,按功能可分为3类:☐通用寄存器◆数据寄存器AX、BX、CX、DX◆指针寄存器SP、BP◆变址寄存器SI、DI ☐控制寄存器◆指令指针寄存器IP◆标志寄存器FLAGS ☐段寄存器◆代码段寄存器CS◆数据段寄存器DS◆堆栈段寄存器SS◆附加段寄存器ESFLAGsAHBHCHDHSIDIBPSPALBLCLDLDSESSSCSIP FLAGs8086处理器的内部寄存器⏹数据寄存器AX、BX、CX、DX☐可以按字(16位)访问,也可以按字节(8位)访问☐多数情况下,这些数据寄存器用在算术运算或逻辑运算中,作为通用寄存器。
8086处理器的内部寄存器⏹地址指针寄存器☐用来指示存取位于当前堆栈段中的数据所在的地址。
☐堆栈指针寄存器SP(Stack Pointer)指示当前堆栈的栈顶偏移地址☐基址指针寄存器BP(Base Pointer)指示堆栈段中某一块数据区的首地址⏹变址寄存器☐用于存放当前数据串的偏移地址☐源变址寄存器SI(Source Index)存放源数据串的偏移地址☐目标变址寄存器DI(Destination Index)存放目的数据串的偏移地址8086处理器的内部寄存器⏹指令指针寄存器IP(Instruction Pointer)☐在CPU正常运行时,IP中BIU要取的下一条指令的偏移地址。
IP在程序运行中能自动修正,使之始终指向下一条指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80386共提供7种类型的32位寄存器,如下:1.通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)2.段寄存器(CS、SS、DS、ES、FS、GS)3.指令指针寄存器和标志寄存器(EIP、EFLAGS)4.系统表寄存器(GDTR、IDTR、LDTR、TR)5.控制寄存器(CR0、CR1、CR2、CR3、CR4)6.调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)7.测试寄存器(TR6、TR7)其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。
下图是前四类寄存器的大致示意图:本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。
一、通用寄存器一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。
这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。
二、段寄存器80386比8086/80286增加了两个段寄存器FS、GS。
除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。
每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。
三、指令指针寄存器和标志寄存器指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。
标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。
IOPL(I/O Privilege Level)是从80286开始出现的,占2个bit表示I/O特权级,如果当前特权级小于或等于IOPL,则可以执行I/O操作,否则将出现一个保护性异常。
IOPL只能由特权级为0的程序或任务来修改。
NT(Nested Task)也是从80286开始出现的,表示嵌套任务,用于控制中断返回指令IRET,当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。
下面的标志位是80386以后的CPU才有的标志。
VM(Virtual-8086 mode)表示虚拟8086模式,如果VM被置位且80386已出于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。
RF(Resume flag)表示恢复标志(也叫重启标志),与调试寄存器一起用于断点和单步操作,当RF=1 时,下一条指令的任何调试故障将被忽略,不产生异常中断。
当RF=0时,调试故障被接受,并产生异常中断。
用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位。
AC(Alignment check)表示对齐检查。
这个标志是80486以后的CPU才有的。
当AC=1且CR0中的AM=1时,允许存储器进行地址对齐检查,若发现地址未对齐,将产生异常中断。
所谓地址对齐,是指当访问一个字(2字节长)时,其地址必须是偶数(2的倍数),当访问双字(4字节长)时,其地址必须是4的倍数。
但是只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志。
VIF(Virtual interrupt flag)表示虚拟中断标志。
以下的三个标志是Pentium以后的CPU才有的。
当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。
该标志要和下面的VIP和CR4中的VME 配合使用。
VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。
当VIP=1时,VIF有效,VIP=0时VIF无效。
ID(Identification flag)表示鉴别标志。
该标志用来只是Pentium CPU是否支持CPUID的指令。
实际上,如果不编写操作系统,大部分标志可能很难得用到一次,有个印象就好了,用到了再去查不迟。
四、系统表寄存器80386 中有4个系统表寄存器,分别是全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任务状态寄存器(TR)。
系统表寄存器用于在保护方式下,管理4 个系统表,由于只能在保护方式下使用,因此又称为保护方式寄存器。
有关描述附表的问题,另文介绍。
五、控制寄存器80386的控制寄存器有4个,其中CR1保留以后使用,从Pentium开始,又增加了一个CR4,CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW,其基本定义如下:CR0中各位含义如下:∙PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式∙MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。
∙EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
∙TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。
TS=1时不允许协处理器工作。
以上4个定义从80286开始,下面的2个定义从80386开始存在∙ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
∙PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。
从80486开始又增加了如下位定义。
∙NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
∙WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
∙AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS 的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
∙NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE 的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
CR1保留未用;CR2存放引起页故障的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
CR3的bit12--bit31存放页目录的基地址,因为也目录总是页对齐的(一页为4K),所以页目录基地址从bit12开始就可以了。
只有当CR0中的PG=1时,CR3的页目录基地址才有效。
从80486开始,在CR3的低12位定义了两个控制位,如下:∙PCD(Page-level Cache Disable)页CACHE禁止,当PCD=0时,页目录表进行高速缓存,PCD=1时,不进行高速缓存;该位控制PCD引脚控制外部CACHE工作还是不工作。
∙PWT(Page-level Writes Transparent),CACHE的写入分为透写(Write-Through)和回写(Write-Back),80486以上的CPU内部的CACHE都是透写的,但对外部CACHE而言,允许某些页是回写的,而另一些页是透写的,当PWT=1时,外部CACHE对页目录进行透写,否则进行回写;此位驱动PWT引脚以控制外部CACHE是透写还是回写。
CR4是从Pentium CPU开始出现的。
∙VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。
∙PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。
∙TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。
∙DE(Debugging Extensions)调试扩展,∙PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.∙PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits 以上,PAE=0时只能用32bits的物理地址。
∙MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。
∙PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。
∙PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。
∙OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)∙OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)∙VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。
∙SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。