寄存器介绍

来源:互联网 发布:未授权域名 编辑:程序博客网 时间:2024/05/16 13:41
    寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输,
   但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字,而且有些还有多个名字。


    IA-32构架提供了16个基本寄存器,这16个基本寄存器可以归纳为如下几类:
    • 通用寄存器
    • 段寄存器
    • 状态和控制寄存器
    • 指令寄存器

通用寄存器

32位通用寄存器有八个,eax, ebx, ecx, edx, esi, edi, ebp, esp,

他们主要用作逻辑运算、地址计算和内存指针,具体功能如下:

  • eax    累加和结果寄存器
  • ebx    数据指针寄存器
  • ecx    循环计数器
  • edx    i/o指针
  • esi    源地址寄存器
  • edi    目的地址寄存器
  • esp    堆栈指针
  • ebp    栈指针寄存器
当然,以上功能并未限制寄存器的使用,特殊情况为了效率也可作其他用途。

这八个寄存器低16位分别有一个引用别名 ax, bx, cx, dx, bp, si, di, sp, 

其中 ax, bx, cx, dx, 的高8位又引用至 ah, bh, ch, dh,低八位引用至 al, bl, cl, dl

在 64-bit 模式下,有16个通用寄存器,但是这16个寄存器是兼容32位模式的,
32位方式下寄存器名分别为 eax, ebx, ecx, edx, edi, esi, ebp, esp, r8d – r15d.
在64位模式下,他们被扩展为 rax, rbx, rcx, rdx, rdi, rsi, rbp, rsp, r8 – r15.
其中 r8 – r15 这八个寄存器是64-bit模式下新加入的寄存器

段寄存器

段寄存器 cs, ds, ss, es, fs, gs, 保存16位的段选择子,一个段选择子指定了一个段在内存的指针,

以便再内存中访问段,访问方式与内存模式有关,段模式和平坦模式其代表的意义并不相同。

  • cs    代码段寄存器

  • ds, es, fs, gs    数据段寄存器

  • ss    堆栈段寄存器

在 64-bit 模式下,这6个寄存器并无变化,只是使用上略有区别。

状态和控制寄存器 eflags
这个寄存器表示的意义非常丰富,程序中并不直接操作此寄存器,并由此衍生出很多操作指令。
除去一些保留位,其他每位都代表一个具体的含义,
其中 bits 0, 2, 4, 6, 7, 11 是状态位
,标识了某此操作后的状态:
  • CF (bit 0) —— 进位标识,算术操作进行了进位和借位,则此位被设置
  • PF (bit 2) —— 奇偶标识,结果包含奇数个1,则设置此位
  • AF (bit 4) —— 辅助进位标识,结果的第3位像第4位借位,则此位被设置
  • ZF (bit 6) —— 零标识,结果为零,此位设置
  • SF (bit 7) —— 符号标识,若为负数则设置此位
  • OF (bit 11) —— 溢出标识,结果像最高位符号位进行借位或者进位,此标志被设置

8, 9, 10 位为控制标识:

  • TF (bit 8) —— 陷阱标识,设置进程可以被单步调试

  • IF (bit 9) —— 中断标识,设置能够响应中断请求

  • DF (bit 10) —— 方向标识,用于标示字符处理过程中指针移动方向。

64-bit模式下,该寄存器被扩展为64位,rflags,但是其高32位保留未被使用,其低32位所表示含义与32位模式相同。
指令寄存器 EIP
EIP —— 标志当前进程将要执行指令位置,在64位模式下扩展为 RIP 64位指令寄存器。
控制寄存器
cr0, cr2, cr3, cr4

系统表指针寄存器

  • idtr —— 中断描述符表信息
  • gdtr —— 全局描述符表信息
  • ldtr —— 局部描述符表信息

任务寄存器tr

保存任务的状态信息 tss

调试寄存器
dr0 – dr7,控制和允许监视进程的调试操作
x87 FPU 寄存器
这组指令专门用过浮点运算,因为浮点运算尤其固有的特性,所以需要使用一组独立寄存器。
数据寄存器包括 r0 – r7 的8个 80 位寄存器,汇编程序中通过名字 st(x) 引用,
另外还有3个16位寄存器,分别是控制寄存器,状态寄存器,标记寄存器。这里的省略具体含义的介绍。
MMX 寄存器
MMX 为一种 SIMD 技术,即可通过一条指令执行多个数据运算,共有8个64位寄存器,分别为mm0 – mm7,
他与其他普通64位寄存器的区别在于通过它的指令进行运算,可以同时计算2个32位数据,或者4个16位数据等等,
可以应用为图像处理过程中图形 颜色的计算。
另外需要特别注意的是,MMX并非一种新的寄存器,而是FPU 80位寄存器的低64位,也就是说,使用MMX指令集,会影响浮点运算!
XMM 寄存器

XMM 同 MMX,只是他有 8 个 128 位寄存器,分别为 xmm0 – xmm7,另外还包含计算过程中的状态和控制寄存器


0 0