x86寄存器的一般功能

写在前面

本文打算对IA-32平台的常用寄存器做个总结,有的图片直接用的网上的,在此感谢前辈!

寄存器的分类

1、EAX, EBX, ECX, EDX都可以作为32位寄存器、16位寄存器或者8位寄存器使用。EAX可作为累加器用于乘法、除法及一些调整指令,对于这些指令,累加器常表现为隐含形 式。EAX寄存器也可以保存被访问存储器单元的偏移地址。EBX常用于地址指针,保存被访问存储器单元的偏移地址。ECX经常用作计数器,用于保存指令的 计数值。ECX寄存器也可以保存访问数据所在存储器单元的偏移地址。用于计数的指令包括重复的串指令、移位指令和循环指令。移位指令用CL计数,重复的串 指令用CX计数,循环指令用CX或ECX计数。EDX常与EAX配合,用于保存乘法形成的部分结果,或者除法操作前的被除数,它还可以保存寻址存储器数据。

2、EBP和ESP是32位寄存器,也可作为16位寄存器BP, SP使用,常用于椎栈操作。EDI和ESI常用于串操作,EDI用于寻址目标数据串,ESI用于寻址源数据串。

3、指令指针寄存器EIP(extra instruction pointer)存放指令的偏移地址。微处理器工作于实模式下,EIP是IP(16位)寄存器。80486 CPU工作于保护模式时EIP为32位寄存器。EIP总是指向程序的下一条指令(即EIP的内容自动加1,指向下一个存储单元)。EIP用于微处理器在程 序中顺序地寻址代码段内的下一条指令。当遇到跳转指令或调用指令时,指令指针寄存器的内容需要修改。

4、EFLAG 包括状态位、控制位和系统标志位,用于指示微处理器的状态并控制微处理器的操作。

5、① 代码段寄存器CS。代码段是一个用于保存微处理器程序代码(程序和过程)的存储区域。CS存放代码段的起始地址。在实模式下,它定义一个64KB存储器段 的起点。在保护模式下工作时,它选择一个描述符,这个描述符描述程序代码所在存储器单元的起始地址和长度。在保护模式下,代码段的长度为4GB。 
② 数据段寄存器DS。数据段是一个存储数据的存储区域,程序中使用的大部分数据都在数据段中。DS用于存放数据段的起始地址。可以通过偏移地址或者其他含有 偏移地址的寄存器,寻址数据段内的数据。在实模式下工作时,它定义一个64KB数据存储器段的起点。在保护模式下,数据段的长度为4GB。 
③ 堆栈段寄存器。堆栈段寄存器SS用于存放堆栈段的起始地址,堆栈指针寄存器ESP确定堆栈段内当前的入口地址。EBP寄存器也可以寻址堆栈段内的数据。 
④ 附加段寄存器ES。ES存放附加数据段的起始地址。常用于存放数据段的段基址或者在串操作中作为目标数据段的段基址。 
⑤ 附加段寄存器FS和GS。FS和GS是附加的数据段寄存器,作用与ES相同,以便允许程序访问两个附加的数据段。
在保护模式下,每个段寄存器都含有一个程序不可见区域。这些寄存器的程序不可见区域通常称为描述符的高速缓冲存储器(descriptor cache),因此它也是存储信息的小存储器。每个段寄存器对应8个字节的影子寄存器,用于存储段描述符。


Basic Program Execution Registers

先来看看intel官网手册中的图3-1,我们关注的是“Basic Program Execution Registers”。

文档中对“Basic Program Execution Registers”的简单描述如下:


由此可以看出,“Basic Program Execution Registers”由以下4部分组成:

通用寄存器(General-Purpose Registers):EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP

段寄存器(Segment Registers):CS,DS,SS,ES,FS,GS

EFLAGS寄存器(EFLAGS Register): EFLAGS

指令指针寄存器(EIP (Instruction Pointer Register)):EIP

在intel手册中专门有一张图如下:

Control registers
intel的5个控制寄存器(CR0,CR1,CR2,CR3,CR4)也是非常重要的,如果你自己写操作系统的话, 就会知道对它们的了解非常重要。主要是用来控制CPU的工作模式以及对当前任务的一些特性控制。

Memory management registers

内存管理寄存器也是非常重要,可以这么说,了解这个几个寄存器的用途,对于了解保护模式至关重要!分别为GDTR,IDRT,LDRT以及TR(task register)。

好,本文就关注这3类寄存器!

在文章《80386的寄存器组成》中也有一幅比较好的图,盗图如下:


接下来一一介绍!


Basic Program Execution Registers

首先来看8个通用寄存器


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

参考链接:

80386的寄存器组成

80X86寄存器详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值