80386的各种寄存器一览

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同。

此书已经开源,阅读地址 http://www.kerneltravel.net

1、通用寄存器(32位)

• EAX:一般用作累加器

• EBX:一般用作基址寄存器(Base)

• ECX:一般用来计数(Count)

• EDX:一般用来存放数据(Data)

• ESP:一般用作堆栈指针(Stack Pointer)

• EBP:一般用作基址指针(Base Pointer)

• ESI:一般用作源变址(Source Index)

• EDI:一般用作目标变址(Destinatin Index)

2、段寄存器(16位)

• CS:代码段寄存器

• DS:数据段寄存器

• SS:堆栈段寄存器

• ES、FS 及GS:附加数据段寄存器

这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector)。因为16 位的寄存器无法存放32 位的段基地址,段基地址只好存放在段的描述符(Descriptor)中。

3、标志和控制寄存器(32位)

标志寄存器 EFLAGS

指令指针 EIP

机器状态字 CR0

Intel 预留 CR1

页故障地址 CR2

页目录地址 CR3

指令指针寄存器(EIP)中存放下一条将要执行指令的偏移量(offset ),这个偏移量是相对于目前正在运行的代码段寄存器(CS)而言的。偏移量加上当前代码段的基地址,就形成了下一条指令的地址。

4、系统地址寄存器

• 全局描述符表寄存器GDTR(Global Descriptor Table Register ),是48 位寄存器,用来保存全局描述符表(GDT)的32 位基地址和GDT 的大小(16位)。

• 中断描述符表寄存器IDTR(Interrupt Descriptor Table Register),是48 位寄存器,用来保存中断描述符表(IDT)的32 位基地址和IDT 的大小(16位)。

• 局部描述符表寄存器LDTR(Local Descriptor Table Register ),是16 位寄存器,保存局部描述符表LDT 段的选择符。

• 任务状态寄存器TR(Task State Register)是16 位寄存器,用于保存任务状态段TSS 段的16 位选择符。

5、调试寄存器和测试寄存器(32位)

80386 有两个32 位的测试寄存器TR6 和TR7。TR6 是测试命令寄存器,其内存放测试控制命令。TR7 是数据寄存器,其内保存转换旁路缓冲器测试的数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【我问 Crossin】python程序一闪而过,是我的打开方式不对?

除了在公众号、交流群组或论坛上提问,大家有想问的问题也可以直接在本栏目文章下留言,接受以下提问: 与编程相关的问题 工作咨询、学习方向建议 程序猿的日常 Cro...

2769
来自专栏IT技术篇

gcc 编译参数 -fno-strict-aliasing

  最近在项目中遇到一个问题,当使用double类型数据时,在进行jce编解码后会出现乱数据问题,比如encode一个数据.

47427
来自专栏数据结构与算法

洛谷P3835 【模板】可持久化平衡树

题目背景 本题为题目 普通平衡树 的可持久化加强版。 数据已经经过强化 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对...

3116
来自专栏coderhuo

arm平台根据栈进行backtrace的方法

嵌入式设备开发过程中,难免会遇到各种死机问题。这类问题的定位一直是开发人员的噩梦。 死机问题常见定位手段如下:

491
来自专栏微信公众号:Java团长

Java基础07 包

我们已经写了一些Java程序。之前的每个Java程序都被保存为一个文件,比如Test.java。随后,该程序被编译为Test.class。我们最终使用$java...

592
来自专栏陈树义

简单笔记

1、类的表面类型和实际类型 实例对象有两个类型:表面类型(Apparent Type)和实际类型(ActualType),表面类型是声明时的类型,实际类型是对象...

2455
来自专栏知识分享

STM32 中 BIT_BAND(位段/位带)和别名区使用入门(转载)

一、 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作:...

3259
来自专栏闻道于事

Java之初识

今天开始学习Java 1.什么是Java?   Java是1995年由sun公司推出的一门极富创造力的面向对象编程语言,是由Java之父詹姆斯格斯林博士设计的。...

2778
来自专栏文渊之博

如何使用Python读取大文件

背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方...

40012
来自专栏Vamei实验室

Python深入02 上下文管理器

上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用...

1837

扫码关注云+社区