汇编笔记:寄存器介绍

寄存器是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,另外还包含计算过程中的状态和控制寄存器

转自:https://blog.csdn.net/lidonghat/article/details/70244288 

你可能感兴趣的:(asm,汇编笔记,寄存器介绍)