什么是80X86宏汇编语言程序设计

什么是80X86宏汇编语言程序设计,第1张

《80X86宏汇编语言程序设计教程》以目前广泛使用的Pc机为平台,详细介绍了宏汇编语言的基本概念、程序设计的基本方法与技巧。全书共10章,主要内容包括:宏汇编语言、程序设计的基本技巧、输入/输出程序设计、32位CPU扩展功能、汇编语言上机内容与要求。《80X86宏汇编语言程序设计教程》内容详实,叙述细腻易懂,在章节安排上由浅入深,指令介绍与指令应用紧密结合,使得知识易于理解和掌握。《80X86宏汇编语言程序设计教程》可作为高等院校计算机及相关专业“汇编语言程序设计”课程教材,也可作为独立学院、高职高专计算机及相竖迟困关专业、有关工程技术人员的教学参考书。 编辑推荐《80X86宏汇编语言程序设计教程》:计算机科学与技术系列教材 目录

第1章 基础知识

1.1 计算机语言概述

1.1.1 机器语言

1.1.2 汇编语言

1.1.3 高级语言

1.1.4 非过程性语言

1.1.5 汇编语言的特点

1.2 计算机中数据的表示方法

1.2.1 进位计数制

1.2.2 数制转换

1.2.3 计算机中数据的表示

习题1

第2章 8086/8088计算机系统组织

2.1 8086/8088CPU的内部结构

2.1.1 8086CPU的功能结构

2.1.2 8086CPU的寄存器结构

2.2 存储器组织

2.2.1 存储器的地址和内容

2.2.2 存储器的分段

2.3 堆栈

2.3.1 堆栈的特点

2.3.2 堆栈的作用

2.3.3 堆栈的 *** 作

习题2

第3章 汇编语言语法与寻址方式

3.1 汇编语言语句类型及格式

3.1.1 语句类型

3.1.2 指令语句格式

3.2 伪指令

3.2.1 段定义伪指令

3.2.2 数据定义

3.2.3 符号定义伪指令

3.2.4 与地址有关的伪指令

3.2.5 常用伪指令

3.3 表达式

3.3.1 常量余念

3.3.2 数值表达式

3.3.3 地址表达式

3.4 寻址方式

3.4.1 立即数寻址方式

3.4.2 寄存器寻址方式

3.4.3 存储器型寻址方式

3.4.4 外设型寻址方式

3.5 汇编语言源程序结构

3.6 常用DOS功能调用

习题3

第4章 汇编语言指令系统

4.1 数据传送指令

4.2 算术运算指令

4.3 位 *** 作指令

4.4 处理器控制指令

习题4

第5章 汇编语言基本程序设计

5.1 汇编语言程序设计步骤

5.2 顺序结构程序设计

5.3 分支结构程序设计

5.3.1 转移地址的寻址方式

5.3.2 无条件转移指令

5.3.3 条件转移指令

5.3.4 分支结构程序设计

5.4 循环结构程序设计

5.4.1 循环控制结构

5.4.2 循环控制指令

5.4.3 循环程序设计方法

5.4.4 多重循旦州环程序设计举例

5.5 串 *** 作程序设计

5.5.1 串 *** 作概述

5.5.2 串 *** 作指令及程序设计

习题5

第6章 汇编语言模块化程序设计

6.1 子程序设计

6.1.1 子程序概述

6.1.2 子程序的调用与返回指令

6.1.3 子程序的定义

6.1.4 主程序与子程序的参数传递

6.1.5 子程序的嵌套

6.2 模块化程序设计

6.2.1 模块的装配连接

6.2.2 模块问的通信

6.2.3 模块化程序设计举例

习题6

第7章 高级汇编语言程序设计

7.1 宏汇编

7.1.1 宏指令的使用

7.1.2 宏与子程序的区别

7.1.3 与宏有关的伪指令

7.1.4 宏库的建立与使用

7.2 重复汇编

7.3 条件汇编

7.4 数据结构

7.5 数据记录

7.6 汇编语言与高级语言的连接

7.6.1 嵌入汇编语言

7.6.2 多模块混合编程

习题7

第8章 输入/输出程序设计

8.1 输入/输出概述

8.1.1 I/O端口的编址方式

8.1.2 数据传送方式

8.2 数据的输入腧出

8.2.1 I/O指令

8.2.2 程序查询I/O方式

8.2.3 中断I/O方式

8.3 键盘输入控制

8.4 屏幕输出控制

8.5 打印机输出控制

8.6 磁盘文件 *** 作

8.6.1 文件概述

8.6.2 文件 *** 作的系统功能调用

8.6.3 文件管理程序设计

习题8

第9章 32位机新增指令及功能

9.1 80386的工作机制

9.1.1 80386CPU的内部结构

9.1.2 80386寄存器

9.1.3 80386存储器管理

9.1.4 存储模型与段的简化定义

9.1.5 80386的寻址方式

9.1.6 80386新增指令

9.2 80486系统

9.2.1 80486CPU结构

9.2.2 80486的内存管理和高速缓存

9.2.3 80486扩充指令

9.3 Pentium系统

9.3.1 PendumCPU结构

9.3.2 Penfium扩充指令

9.4 程序举例

习题9

第10章 实验指导

10.1 汇编语言上机过程及调试工具

10.2 分支程序设计

10.3 循环程序设计

10.4 子程序设计(一)

10.5 子程序设计(二)

10.6 字符处理程序设计

10.7 中断程序设计

10.8 磁盘文件管理程序设计

10.9 模块化程序设计

10.10 综合程序设计

附录A ASCII码表

附录B 调试工具DEBUG

参考文献

…… [看更多目录] 序言《80X86宏汇编语言程序设计教程》是高等院校计算机硬、软件及应用专业学生都必须学习的核心课程之一,它是计算机组成原理、 *** 作系统及其他核心课程的基础课,也是微机原理、单片机应用等课程的学习基础。同时,该课程对于训练学生掌握程序设计技术、熟悉上机 *** 作和程序调试技术都有重要作用。

《80X86宏汇编语言程序设计教程》的内容十分丰富,知识量大,是一门教师普遍感到难教、学生普遍感到难学的课程。为了满足教师和学生的教学需要,作者根据本课程的特点及知识结构,在多年教授这门课程的教学经验的基础上编写了此书,以期能帮助学生快速熟练地掌握相关知识,同时为教师的教学提供指导。

本书共10章,分为两大部分和两个附录,各部分内容如下:

第一部分:第1~9章。详细介绍了16位80X86 CPU的宏汇编程序设计。第1章基础知识,介绍了学习汇编语言程序设计所需的数据编码与运算等若干预备知识。第2章8086/8088计算机内部体系结构,介绍8086/8088 CPU内部结构和存储器管理。第3章汇编语言语法及七种寻址方式,主要介绍了宏汇编语言中的各种符号、表达式、伪指令语句、寻址方式及常用的系统功能调用。第4章汇编语言指令系统,全面介绍了8086指令系统中数据传送指令、算术运算指令、逻辑运算指令、处理器控制指令。第5章汇编语言基本程序设计,系统介绍了程序的三种基本结构(顺序结构、分支结构及循环结构)及串 *** 作指令的设计方法与技巧,同时对实现这些结构的转移指令、循环指令和串指令也作了详细介绍。第6章汇编语言模块化程序设计,介绍了子程序及模块化程序设计。第7章高级汇编语言程序设计,介绍了宏的定义与调用方法、重复汇编、条件汇编等技术,特别介绍了汇编语言与高级语言的混合编程。第8章输入/输出程序设计,介绍了输入/输出数据传送方式、中断技术、软中断程序设计及DOS与BIOS中断调用。第9章32位机新增指令及功能,以典型的32位80386 CPU为例,介绍了32位CPU的工作模式、内部寄存器、内存管理、寻址方式、新增指今等扩展功能。 文摘插图:

1.1.3高级语言

尽管汇编语言比机器语言方便,但汇编语言仍然具有许多不便之处,程序编写的效率远远不能满足需要。1954年,第一个高级语言FORTRAN问世了。高级语言是一种与具体的计算机硬件无关、独立于机器的通用语言,它比较接近人类自然语言的语法及数学表达式,人们用高级语言编程不必了解和熟悉机器的指令系统,更容易被人们掌握和使用。高级语言采用接近自然语言的词汇,其程序的通用性强,易学易用,这些语言面向计算机求解问题的过程,不依赖具体机器,与特定机器相分离。计算机不能直接执行高级语言程序,高级语言程序必须先翻译转换成“目标程序”(即机器语言程序)才能被执行。这种翻译转换工作由被称为“编译程序”的专门软件来完成,其过程如图1.2所示。

高级语言翻译成机器语言有两种方式,一种是先把高级语言程序翻译成机器语言程序,然后在机器上执行,这种翻译称为编译方式,大多数高级语言如PASCAL语言、c语言等都是采用这种方式;另一种方式是直接把高级语言程序在机器上运行,一边解释一边执行,这种翻译方式称为解释,如BASIC语言就采用这种方式。每一种高级语言都有自己的编译程序,在一台计算机上运行某一种高级语言源程序的前提是该计算机系统配置了该语言的编译程序。

高级语言源程序在不对硬件编程时,是在未考虑机器结构的特点下编写的,经过翻译后的目标程序往往不够精练,过于冗长,加大了目标程序的长度,导致存储空间占用较大和执行时间较长。

1.1.4非过程性语言

面向过程的高级语言称为过程性语言,用它编程序必须写出每一步如何进行的全过程。程序设计者必须具体指出执行的每一个细节(例如,输入一个数给某一变量、进行某一公式的运算、进行什么条件判断、执行多少次循环等)。这要求程序设计人员考虑得十分周到,稍有不慎(例如写错一个字母),就会导致程序运行失败。

先先说8086

 在8086的EU--执行单元(Execution Unit)和BIU--总线接口单元(Bus Interface Unit)两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如 *** 作数地址、 *** 作数及运算的中间结果等。微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存 *** 作数、中间结果或其它信息,能提高程序的运行效率。根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

1. 通用寄存器

通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的 *** 作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:

AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放 *** 作数。另外,所有的I/O指令都使用AX或AL与裤唤外部设备传送信息。

BX在计算存储器地址时,可作为基址寄存器使用。

CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。

DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O *** 作,DX可用来存放I/O的端口地址。

SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放 *** 作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。

SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。

BP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。

SI为源变址寄存器,在串处理指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动减量的变址功能。

DI为目的变址寄存器,在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI自动增量或减量。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

8086的专用寄存器包括IP、SP和FLAGS三个16位寄存器。

IP为指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。在计算机中,控制程序的执行流程就是通过控制IP的值来实现的。

SP为堆栈指针寄胡握凯存器,它与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。

FLAGS为标志寄存器,这是一个存放条件码标志、控制标志的16位寄存器。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

8086的标志寄存器

条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由(CPU)自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。

① 进位标志 CF,记录运算时最高有效位产生的进位值。

② 符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0。

③ 零标志ZF,运算皮段结果为0时ZF位置1,否则置0。

④ 溢出标志 OF,在运算过程中,如 *** 作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。

⑤ 辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。

⑥ 奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果 *** 作数中1的个数为偶数时置1,否则置0。

控制标志位有3位:

① 方向标志 DF,在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理。

② 陷阱标志 TF,用于调试时的单步方式 *** 作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。

③ 中断标志 IF,用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。

8086提供了设置某些状态信息的指令。必要时,程序员可使用这些指令来建立状态信息。

调试程序Debug中提供了测试标志位的手段,它用符号表示某些标志位的值

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

3. 段寄存器

8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。

代码段寄存器CS:存放当前执行的程序的段地址。

数据段寄存器DS:存放当前执行的程序所用 *** 作数的段地址。

堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。

附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。

注:

执行单元(Execution Unit):负责指令的执行,实际是既有控制器的功能,也有运算器的功能。包括:ALU、标志寄存器、暂存器、寄存器组、控制单元 。EU和BIU是组成8086微处理器的两个基本功能部件,他们相互配合完成指令 *** 作。当EU从指令队列中去走指令后,指令队列出现空字节,BIU就立即自动地从内存中取出后续的指令放入队列;当EU执行指令需要 *** 作数时,BIU就根据EU给出的 *** 作数有效地址,从指定的内存单元或I/O端口取出数据供EU使用;当EU运算结束后,BIU将运算结果写入指定的内存单元或I/O端口。EU和BIU这两个功能部件又是相互独立的。大多数情况下,EU的执行指令 *** 作与BIU的取指令 *** 作在实践上可重叠进行,既EU进行某条指令执行 *** 作时,BIU可同时进行后继指令的取指令 *** 作,这两个部件并行连续工作可形成指令处理流水线。这样,可减少CPU取指令的等待时间,加快了CPU的指令执行速度,也提高了系统总线的利用率。)

写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回来查查相关的内容。

然后说一下386

80386共提供7种类型的32位寄存器,如下:

通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)

段寄存器(CS、SS、DS、ES、FS、GS)

指令指针寄存器和标志寄存器(EIP、EFLAGS)

系统表寄存器(GDTR、IDTR、LDTR、TR)

控制寄存器(CR0、CR1、CR2、CR3、CR4)

调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)

测试寄存器(TR6、TR7)

其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。

下图是前四类寄存器的大致示意图:

本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。

一、通用寄存器

一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位 *** 作,进行32位 *** 作是,寄存器名称前面冠以“E”。

这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。

ESI EDI变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器 *** 作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的 *** 作数和运算结果。 它们可作一般的存储器指针使用。在字符串 *** 作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。

二、段寄存器

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 *** 作。

OSXSAVE(XSAVE and Processor Extended States-Enable Bit)

六、调试寄存器

一共有8个调试寄存器DR0--DR7,DR0-DR3可以分别设置4个断点的线性地址,DR4-DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

七、测试寄存器

一共有8个测试寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE测试,TR6为命令测试寄存器,TR7为测试数据寄存器


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12288503.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存