80386常用内部寄存器
了解一款芯片,最基本的就是要了解它的寄存器。大家不要因为80386是32位处理器,就认为它的寄存器都是32位的。其实它的寄存器相当的复杂。不仅有32位的,还有16位的,48位的,乃至64位的。80386共有34个寄存器,可分为七类。它们分别是通用寄存器、指令指针和标志寄存器、段寄存器、系统地址寄存器、控制寄存器、调试和测试寄存器。以下是部分常用的寄存器:
一、通用寄存器(8个)
80386有8个32位的通用寄存器,这8个通用寄存器都是由8088/8086/80286的相应16位通用寄存器扩展成32位而得。名字分别是:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP。每个寄存器可以掰成两个16位寄存器使用,也可以掰成4个8位寄存器使用。
二、指令指针和标志寄存器(2个)
80386的指令指针EIP是一个32位寄存器,是从8086的IP扩充而来。
80386的标志寄存器EFLAGS也是一个32位寄存器,其中只使用了15位,从8086的FLAGS寄存器扩展而来。如下图所示。
三、段寄存器(6个)
80386有6个段寄存器,分别是CS,DS,SS,ES,FS和GS,是16位寄存器。前4个段寄存器的名称与8088/8086相同,在实地址方式下使用方式也和8088/8086相同。80386又增加了FS与GS,主要为了减轻对DS段和ES段的压力。
四、控制寄存器(4个)
80386有4个32位控制寄存器(CR0、CR1、CR2和CR3)。它们的作用是保存全局性的机器状态。其中CR0的格式如下图所示。
CR0的低16位称为机器状态字MSW,其中:
PE 保护允许位。进入保护方式时PE=1。除复位外,不能被清除。实方式时PE=0。
PG 页式管理允许位。PG=1表示启用芯片内部的页式管理系统,否则PG=0。
其余的三个控制寄存器的作用是:CR1由Intel公司保留,CR2存放引起页故障的线性地址,CR3存放当前任务的页目录基地址(页目录基址寄存器)。
五、系统地址寄存器(4个)
80386有4个系统地址寄存器,用来存储操作系统需要的保护信息和地址转换表信息、定义目前正在执行任务的环境、地址空间和中断向量空间。
GDTR 48位全局描述符表寄存器,用于保存全局描述符表的32位基地址和全局描述符表的16位界限(全局描述符表最大为216字节,共2^16/8=8K个全局描述符)。
注:GDT表里面的每一项都表明一个段的信息,或者是一个LDT表的相关信息。其实一个LDT表也是一个段。所以也可以说GDT表的每一项都描述一个段。就像一个文件夹下面可以有文件,也可以有文件夹一样,GDT表里面既可以有段描述符,也可以有LDT的表。
IDTR 48位中断描述符表寄存器,用于保存中断描述符表的32位基地址和中断描述符表的16位界限(中断描述符表最大为216字节,共2^16/8=8K个中断描述符)。
LDTR 16位局部描述符表寄存器,用于保存局部描述符表的选择符。一旦16位的选择符(也叫选择子)放入LDTR,CPU会自动将选择符所指定的局部描述符装入64位的局部描述符寄存器中。
TR 16位任务状态段寄存器,用于保存任务状态段(TSS)的16位选择符。与LDTR类似,一旦16位的选择符放入TR,CPU会自动将该选择符所指定的任务描述符装入64位的任务描述符寄存器中。
注:TSS是一个段,所以在GDT中有对应的表项描述。
LDTR和TR寄存器是由16位选择字段和64位描述符寄存器组成。用来指定局部描述符表和任务状态段TSS在物理存储器中的位置和大小。64位描述符寄存器是自动装入的,程序员不可见。LDTR与TR只能在保护方式下使用,程序只能访问16位选择符寄存器。(注意区分描述符表寄存器与描述符寄存器)
可以看到IDTR也是48位的(大于32位),与GDTR位数一样,大于32位的结构自然就有4G内任意寻址的能力。所以理论上我们可以直接访问中断向量表,不需要通过选择子(16位结构)来间接寻找。所以IDT表可以与GDT表完全独立,不需要像LDT一样还要在GDT表建立相关表项。但是TSS段和LDT表两个结构就不行,他们的寄存器只有16位,不可能在4G内存中任意寻址,所以只能将其插入到GDT表中,然后借用GDT和自身的选择子的组合来间接寻址。
参考:http://mcit.xjtu.edu.cn/wlkj/wykj/ch2/ch2_4_1.htm
80386常用内部寄存器相关推荐
- ORCAD常用元件库说明
以下是ORCAD自带库文件的说明,路径:Cadence\Cadence_SPB_16.6\tools\capture\library 1' AMPLIFIER.OLB 共182个零件,存放模拟放大器I ...
- Delphi常用关键字用法详解
本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: [delphi] view plaincopy //它使得你能够创建一个新变量, ...
- android 串口通信_使用UART与ZYBO进行通信常用外设设计方案
作者:Wilson Qiu,Xilinx工程师 常用外设设计 使用UART与ZYBO进行通信 ZYNQ学习过程中一个重要环节是进行调试,当然在SDK中进行调试时,设置断点进行单步调试非常高效.但是ZY ...
- oracle 运营维护_Oracle数据库日常运维常用脚本
大 中 小 Oracle数据库日常运维常用脚本 1 查看所有数据文件 select file_name from dba_data_files union select file_name from ...
- zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)
2. IO的电压为1.8V. 3. 默认使用的参数为:115200波特率以及其他对应参数,见图 21. Step2: 在Vivado的Block Design中配置ZYNQ7 Processing S ...
- 保护模式下的80386及其编程02:机器状态和存储寻址
目录 1 寄存器 1.1 通用寄存器 1.2 处理器控制寄存器 1.2.1 指令指针寄存器EIP 1.2.2 处理器状态和控制标志寄存器EFLAGS 1.3 段寄存器 2 内存寻址机制 2.1 基于段 ...
- 【嵌入式模块】常用扩展芯片及数据手册总结
文章目录 前言 一.74HC165 二.74HC595 工作原理 实战演练 三.MAX7219/MAX7221 参考链接 概述 工作原理介绍 点阵LED控制例程 四.PCA9685 参考链接 概述 引 ...
- 内部寄存器:通用寄存器、控制寄存器、段寄存器
内部寄存器含14个16位寄存器,按功能可分为三类:8个通用寄存器.4个段寄存器.2个控制寄存器. 通用寄存器:包括(数据寄存器.地址指针寄存器.变址寄存器) 1.数据寄存器(AX,BX,CX,DX)可 ...
- 常用Linux操作系统的发展历史
文件目录 文件权限 特权文件suid,sgid,sbit Linux操作系统 Linux发展史及简介 Linux简单介绍 Linux发展史 Linux族谱 Linux重要人物 Linux与Unix的渊 ...
- Synplify Pro的常用选项及命令
文章目录 一. 状态机相关 二. 面积和速度优化 三. 其他常用选项及命令 Synplify Pro是Synplicity公司(Synopsys公司于2008年收购了Synplicity公司, 其客户 ...
最新文章
- Middleware课程01-概述
- 弱电工程网络视频监控系统联网方式及接地要求
- 喜马拉雅音频下载工具
- vscode 加参数运行_VSCode 调试 Webpack 指南
- CXF客户端配置请求超时限制-SocketTimeoutException(Spring配置文件中配置和通过代码进行配置)
- 别致的上传思路导致getshell的案例
- 完全相同的4个小矩形如图所示放置_短线投资,遇到“矩形突破”,斩钉截铁满仓干!...
- python request url编码_Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求
- ip68级防水可以泡多久_ip68级防水手机有哪些
- Python办公自动化 - 3 Excel办公自动化
- python代码编辑器、最好_这十大文本/代码编辑器最好用
- mysql卸载注意问题_mysql卸载注意事项
- java-maven的配置
- 简练软考知识点整理-激励理论之赫兹伯格双因素理论
- 【硬件工程师】芯片手册阅读-电阻式触摸屏控制芯片
- maven 报错 Failed to execute goal on project ...: Could not resolve dependencies for project ...
- 云渲染和渲染农场有什么区别?看完你就明白了
- 荣耀30会更新鸿蒙系统吗,华为荣耀30肿么升级鸿蒙系统?
- 河南省iscc2019线下(hnciscn)Misc
- 【题解】Cutting Woods