寄存器

在IA- 32平台的处理器有多个组不同大小的寄存器。内的IA-32平台不同的处理器包括专门的寄存器。可在IA-32家族的所有处理器寄存器的核心基团示于下表中。
注册
描述
通用
用于存储工作数据的8个32位寄存器
用于处理内存访问SegmentSix 16位寄存器
指令指针
一个单一的32位寄存器指向下一个指令代码
执行
浮点数据
用于浮点运算的数据八个80位寄存器
控制
用于确定操作模式5个32位寄存器
处理器
调试
用于包含信息时, 8个32位寄存器
调试处理器
通用寄存器
通用寄存器用来暂时存储,因为它是在处理器上处理的数据。
虽然大多数通用寄存器,可用于举办任何类型的数据,有些已取得特殊用途,其一贯使用的汇编语言程序。下面的表显示了可用的奔腾平台上的通用寄存器,它们是最常用的东西。
注册
描述
EAX
累加器操作数和结果数据
EBX
指针中的数据的数据存储段
ECX
计数器的字符串,并循环操作
EDX
I / O的指针
电子数据交换
数据指针,字符串操作的目的
ESI
数据指针,字符串操作的源
ESP
堆栈指针
EBP
堆栈指针的数据
32位EAX , EBX ,ECX和EDX寄存器也可以通过16位和8位的名字引用的,代表旧版本的寄存器。 Folling图显示的寄存器是如何可以被引用。

通过使用参考AX, EAX寄存器的低16位被使用。通过使用参考AL ,低8位寄存器EAX被使用。 AH引用AL之后的下一个高8位。
段寄存器
段寄存器是用来专门为引用的内存位置。在IA- 32处理器平台允许三种不同的访问系统内存的方法:

    
平面内存模型
    
分段存储器模型
    
实地址模式

平面内存模型提供所有系统内存作为一个连续的地址空间。所有的指令,数据和堆栈都包含在相同的地址空间。每个存储单元由一个特定的地址进行访问,称为线性地址。
分段存储器模型将系统内存为独立的段组,由位于段寄存器指针引用。每个段用于包含数据的特定类型。一个段是用来包含的指令代码,另一个数据元素,以及第三程序堆栈。
在段存储位置由逻辑地址确定。一个逻辑地址由段地址和偏移地址。处理器转换的逻辑地址到对应的线性地址位置存取的存储器中的字节。
段寄存器用于包含段地址为特定数据的访问。下表描述了可用的段地址。
段寄存器
描述
CS
代码段
DS
数据段
SS
堆栈段
ES
附加段指针
FS
附加段指针
GS
附加段指针
每个段寄存器是16位寄存器,包含指针在存储器的特定区间的开始。 CS寄存器包含指针到内存中的代码段。代码段是其中的指令代码被存储在存储器中。处理器从存储器中检索基于CS寄存器值,并且包含在EIP指令指针寄存器的偏移值的指令代码。程序不能显式地加载或更改CS寄存器。作为节目被分配一个存储空间,处理器把它的值。
对DS , ES,FS和GS段寄存器都用来指向数据段。由具有四个独立的数据段,该程序可以帮助单独的数据元素,以确保它们不重叠。该程序必须加载数据段寄存器与段适当的指针值,并使用一个偏移值引用单个存储单元。
SS段寄存器是用来指向堆栈段。堆栈包含传递给程序中的函数和过程数据值。
如果程序是使用实地址模式中,所有的段寄存器指向零的线性地址,而不是由程序改变。所有的指令代码,数据元素和堆栈元件直接由它们的线性地址进行访问。
指令指针寄存器
指令指针寄存器(或EIP寄存器) ,有时也被称为程序计数器,会追踪的下一个指令代码来执行。虽然这听起来像一个简单的过程,与指令预取缓存的实现并非如此。指令指针指向下一指令来执行。
一个应用程序不能直接修改本身的指令指针。你不能指定一个内存地址,并将其放置在EIP寄存器。相反,你必须使用正常的程序的控制指令,如跳跃,改变下一条指令读入的预取缓存。
在一个平面内存模式中,指令指针包含的内存位置的下一个指令代码的线性地址。如果应用程序是使用分段存储器模型,指令指针指向一个逻辑内存地址,由CS寄存器的内容引用。
控制寄存器
五个控制寄存器用于确定处理器的工作模式,以及当前正在执行的任务的特性。各个控制寄存器如下表中所述。
控制寄存器
描述
CR0
该控制操作模式和处理器的状态标志系统
CR1
当前未使用
CR2
内存页面错误信息
CR3
内存页的目录信息
CR4
标志,使处理器的功能和显示处理器的功能能力
在控制寄存器中的值不能被直接访问,但包含在控制寄存器中的数据可以被移动到一个通用寄存器中。一旦数据在一个通用寄存器,一个应用程序可以检查标志位在寄存器来确定处理器和/或当前正在运行的任务的运行状态。
如果需要改变,以控制寄存器的标志值,该变化可以使在一般目的寄存器中的数据,并且将寄存器移动到控制寄存器。系统程序员通常修改在控制寄存器中的值。普通用户应用程序通常不修改控制寄存器条目,虽然他们会质疑的标志值,以确定在其上运行应用程序的主处理器芯片的能力。
标志
对于在处理器执行的每一个操作,必须有一种机制来确定该操作是否成功与否。处理器标志用于执行此功能。
在IA- 32平台使用一个32位寄存器包含一组状态,控制和系统标志。 EFLAGS寄存器包含32位信息的映射来表示特定信息的标志。一些位保留供将来使用,允许其他标志在未来的处理器中定义。在写这篇文章的时候, 17位用于标志。
该标志被分为三组基于函数:

    
状态标志
    
控制标志
    
系统标志

状态标志
状态标志被用于由所述处理器来表示的数学运算的结果。当前状态标志列于下表中。


名称
CF
0
进位标志
PF
2
奇偶标志
自动对焦
4
调整标志
采埃孚
6
零标志
SF
7
符号标志
作者:
11
溢出标志
如果在一个无符号整数的值进行数学运算产生进位或借位最显著位进位标志位被置位。这表示溢出条件涉及数学运算的寄存器。当发生溢出时,剩余的寄存器中的数据是不正确的答案的数学运算。
奇偶标志是用来表示在一个数学运算结果寄存器是否包含错误数据。作为一个简单的检查的有效性,奇偶标志被设置,如果1位的结果的总数为偶数,如果1位的结果的总数是奇数被清除。通过检查奇偶标志,应用程序可以决定是否登记已自投产以来已损坏。
该调整标志用于二进制编码的十进制(BCD)数学运算。如果一个进位或借位操作发生的用于计算寄存器的第3位的调整标志设置。
如果一个操作的结果为零,则零标志被设置。这是最经常被用来作为一种简单的方法来确定的数学运算是否产生一个零值。
符号标志被设置为结果,这是符号位的最显著位。这表示结果是否为正值或负值。
溢出标志用于带符号整数运算时正值过大,或负值太小,在寄存器中适当的代表。
控制标志
控制标志,用于控制处理器中的特定行为。目前,只有一个控制标志的定义, DF标志,或指示标志。它是用来控制字符串由处理器处理的方式。
当DF标志被设置(设置为1 ) ,字符串的指令自动减小内存地址来获取下一个字节的字符串中。当DF标志被清除(设置为零) ,串指令自动递增的内存地址来获取下一个字节的字符串中。
系统标志
该系统标志用于控制操作系统级别的操作。应用程序不应该试图修改系统标志。系统标志列于下表中。


名称
TF
8
陷阱标志
中频
9
中断允许标志
IOPL
12和13
I / O特权级标志
新台币
14
嵌套任务标志
射频
16
恢复标志
虚拟机
17
虚拟8086模式标志
交流
18
对齐检查标志
VIF
19
虚拟中断标志
要人
20
虚拟中断标志位
ID
21
识别标志
陷阱标志被设置为启用单步模式。在单步模式,所述处理器在一个时间只执行一条指令代码,在等待一个信号来执行的下一条指令。调试汇编语言的应用程序时,这个功能是非常有用的。
中断使能标志控制处理器如何响应来自外部源接收到的信号。
在I / O特权字段表示当前正在运行的任务的I / O特权级别。这个定义的I / O地址空间的访问级别。特权字段的值必须小于或等于访问I / O地址空间所需的访问级别;否则,任何请求访问的地址空间将被拒绝。
嵌套任务标志控制当前正在运行的任务是否与先前执行的任务。这是用于链接中断,称为任务。
简历标志控制处理器是如何回应的时候在调试模式下的例外。
虚拟8086标志指示处理器在虚拟8086模式运行,而不是受保护或实模式。
对齐检查标志使用(一起在CR0控制寄存器中的AM位),使内存的引用对齐检查。
虚拟中断标志复制的IF标志,当处理器在虚拟模式下运行。
当处理器运行在虚拟模式下,以表明一个中断正在等待的虚拟中断标志被使用。
ID标志是有趣的,因为它表示处理器是否支持CPUID指令。如果处理器能够设置或清除此标志,它支持CPUID指令。如果没有,那么CPUID指令不可用。

posted @ 2014-05-25 21:45  鱼时代  阅读(862)  评论(0编辑  收藏  举报