x86_32的寄存器

整体情况如下表

类  型 位  宽 数  量 描  述
通用
32 8 用于存储正在处理的数据
16 6 用于处理内存访问
指令指针 32 1 指向要执行的一条指令码
浮点 80 8 用于浮点数学数据
控制 32 5 用于确定处理器的操作模式
调试 32 8 用于在调试处理器时包含信息


一、通用寄存器

      通用寄存器用于临时存储数据。大多数通用寄存器都可以用于存储任何类型的数据,但是其中一些具有专门的用途,它们在汇编语言中以一致的方式使用,下表列出了x86_32平台上的通用寄存器和它们最常用于何种目的:

寄存器名称 用  途  描  述
eax 用于操作数和结果数据的累加器
ebx 指向数据内存段中的数据的指针
ecx 字符串和循环操作的计数器
edx I/O指针
edi 用于字符串操作的目标的数据指针
esi 用于字符串操作的源的数据指针
esp 堆栈指针
ebp 堆栈数据指针

32位的eax/ebx/ecx和edx寄存器也可通过16位和8位名称引用,以表示寄存器的旧式版本,以向前兼容。

二、段寄存器

      段寄存器专门用于引用内存位置。x86_32平台允许3种不同的内存访问方式:

  • 平坦内存模式
          此模式将全部系统内存表示为连续的地址空间。所有指令、数据和堆栈都包含在相同的地址空间中。通过称为线性地址(linear address)的特定地址访问每个内存位置。

  • 分段内存模式
          此模式把系统内存划分为独立段的组,通过位于段寄存器中的指针进行引用,每个段用于包含特定类型的数据。通常,一个段用于包含指令码,另一个段用于包含数据元素,第三个段用于包含程序堆栈。
          段中的内存位置是通过逻辑地址定义的,逻辑地址由段地址和偏移地址构成,处理器把逻辑地址转换为相应的线性地址位置以便访问内存单元。
          段寄存器用于包含特定数据访问的段地址,下表为可用的段寄存器及其用途:

    寄存器名称 用途描述
    cs 代码段
    ds 数据段
    ss 堆栈段
    es 附加段指针
    fs 附加段指针
    gs 附加段指针
          每个段寄存器都是16位的,包含指向内存特定段的起始位置的指针。cs寄存器包含指向内存中代码段的指针,代码段是内存中存储指令码的位置。处理器按照cs寄存器的值和eip指令指针寄存器中包含的偏移值从内存中获得指令码。程序不能显示的加载或者改变cs寄存器中的内容。当程序被分配一个内存空间时,处理器将为cs寄存器赋值。
          ds/es/fs和gs段寄存器都用于指向数据段。通过使用4个独立的数据段,程序可以分隔数据元素,确保它们不会重叠。程序必须加载带有段的正确指针值的数据段寄存器,并且使用偏移值引用各个内存位置。
          ss段寄存器用于指向堆栈段,堆栈包含传递给程序中的函数和过程的数据值。

  • 实地址模式
          此模式下,所有段寄存器都都指向零线性地址,并且都不会被程序改动;所有指令码、数据元素和堆栈元素都是通过它们的线性地址直接访问的。

三、指令指针寄存器

      指令指针寄存器(即eip寄存器),或称为程序计数器(program counter),它跟踪要执行的下一条指令码。应用程序不能直接修改指令指针本身,不能指定内存地址并且把它送入eip寄存器中,相反,必须使用一般的程序控制指令(比如跳转)来改变它的内容。
      在平坦内存模式中,指令指针包含一条指令码的内存位置的线性地址,如果应用程序使用分段内存模式,那么指令指针指向内在地址,并通过cs寄存器的内容进行引用。

四、浮点数据寄存器

五、控制寄存器

      5个控制寄存器用于确定处理器的操作模式,还有当前正在执行的任务的特性,如下表:


寄存器名称 用途描述
cr0 控制操作模式和处理器状态的系统标志
cr1 当前没有使用
cr2 内存页面错误信息
cr3 内存页面目录信息
cr4 支持处理器特性和说明处理器特性能力的标志
      不能直接访问控制寄存器中的值,但是可以把控制寄存器中包含的数据传送给通用寄存器,如此,应用程序就可以查看豁口中的位标志,以便确定处理器和当前正在运行的任务的操作状态。
      如果必须改动控制寄存器中的值,可以改动通用寄存器中的数据,然后把内容传送给控制寄存器。

六、调试寄存器

今晚先这样,明天继续……。

转载于:https://my.oschina.net/u/2275400/blog/348016

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值