IA-32处理器寄存器浅析

IA-32架构下寄存器分为基本寄存器和系统寄存器。

一、基本寄存器

基本寄存器包括通用寄存器(EAX、EBA、ECX、EDX、ESI、EDI、EBP、ESP)、段寄存器(CS、DS、SS等)、指令指针寄存器EIP、EFLAGS寄存器。通用寄存器的一些特殊用法:

       1、EAX在乘法和除法指令中被自动使用,通常被称为扩展累加寄存器,函数返回值默认也是存在于EAX中的;

        2、在某些指令中,CPU自动使用ECX作为循环计数器,C++中的this指针在汇编语言中默认也是存放于ECX中;

        3、ESP称为扩展堆栈指针寄存器,用于寻址堆栈上的数据;

        4、ESI和EDI通常称为扩展源指针和扩展目的指针寄存器,二者由高速内存数据传送指令使用;

        5、高级语言使用EBP引用堆栈上的函数参数和局部变量,EBP被称为扩展帧指针寄存器;

段寄存器:实地址模式下,段寄存器存放段的基址,段是一块预分配的内存区域。保护模式下(所有指令和特性都是可用的)段寄存器用于存放段描述表的指针(或者说是索引)。段包括代码段(存放代码)、数据段(存放数据)、堆栈段(存放函数的局部变量以及参数)。

指令指针:EIP寄存器存放下一条要执行的指令的地址。

EFLAGS寄存器由控制CPU的操作或者反应CPU某些运算结果的独立二进制位构成,包括控制标志和状态标志等。控制标志控制者CPU的操作(如某些控制标志可以使CPU进入在执行每条指令后,检测到算术运算溢出后进入虚拟模式或者保护模式后中断)。状态标志反映了CPU执行的算术和逻辑运算的结果,包括溢出标志、符号标志、零标志、辅助进位标志、奇偶标志和进位标志,详情如下:

        1、进位标志CF:在无符号算术运算的结果太大而目的操作数无法容纳时置位;

        2、溢出标志OF:在有符号算术运算的结果太大或者太小而目的操作数无法容纳时置位;

        3、符号标志SF:在算术或者逻辑运算的结果为负时置位;

        4、零标志ZF:在算术或者逻辑运算的结果为0时置位;

        5、辅助进位标志AC:在算术运算导致8位操作数的位3到位4产生进位时置位;

        6、奇偶标志PF:结果的最低有效字节为1的位的数目为偶数时置位,否则PF复位。通常PF标志位用于在数据有可能被改变或者丢失的情况下进行错误检查;

二、系统寄存器:

IA-32处理器有若干重要的系统寄存器,这些寄存器仅允许云翔最高特权级(特权级0)上的程序访问这些寄存器,如操作系统内核,此类寄存器如下:

        1、中断描述符表寄存器IDTR:保存中断描述符表的地址,中断描述符表提供了一种方式用于处理中断;

        2、全局描述符表寄存器GDTR:保存全局描述符表地址,全局描述符表包含了任务状态段和局部描述符表的指针(索引);

        3、局部描述符表寄存器LDTR:保存当前正在运行的程序的代码段、数据段和堆栈段的指针;

        4、任务调试器:保存当前执行的任务的状态段TSS的地址;

        5、调试寄存器:用于在调试程序时设置的断点等;

        6、控制寄存器CR0、CR2、CR3:用于控制系统级操作(如任务切换、分页、允许缓存等)的状态标志和数据域;

        7、模型专用寄存器:用于性能监控和机器体系结构检查等系统级操作。对于不同的IA-32处理器,可用的模型专用寄存器和使用方法可能都不同;

应用程序不能访问系统寄存器。

参考资料:《intel汇编语言程序设计第5版》

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值