跳至主要內容

64 位下的寄存器

Kry Oxygen...大约 2 分钟

64 位下的寄存器

通用寄存器

寄存器状态功能
RAX易失返回值
RBX非易失数据存储
RCX易失函数第 4 参数
RDX易失函数第 3 参数
RSI非易失函数第 2 参数
RDI非易失函数第 1 参数
R8易失函数第 5 参数
R9易失函数第 6 参数
R10-R11易失数据存储
R12-R15非易失数据存储
RSP非易失栈顶指针
RBP非易失栈基指针

注: 易失是指被调用函数结束后,该寄存器的值可能会发生改变,因此需要由调用者保存;非易失则是由被调用者来保存,调用结束后的值没有改变。

​ 在x64环境下,函数的参数小于等于6个时,通过寄存器传递;大于6时,通过堆栈传递。

段寄存器

CS,FS:代码段

DS,GS:数据段

SS:栈段

ES:拓展段

段寄存器的内容跟 CPU 寻址模式有关:

  • 实模式: 段寄存器中存放的是段的基地址
  • 保护模式: 此时存放的是段选择子

指令寄存器

即RIP寄存器,存放的是PC指针的值

标志寄存器

控制寄存器

控制寄存器存放的是CPU的运行信息,32位CPU总共由cr0-cr4共5个控制寄存器,64位增加了cr8.

  • cr0:存储了CPU控制标记和工作状态
  • cr1:保留未使用
  • cr2:页错误出现时保存导致出错的地址
  • cr3:存储了当前进程的虚拟地址空间的重要信息——页目录地址
  • cr4:存储了CPU工作相关及当前任务的信息
  • cr8:64位新增拓展

调试寄存器

描述符寄存器

描述符寄存器共有三个:GDTR,LDTR,IDTR

  • GDTR(全局描述符表寄存器): 存放的是全局描述符表GDT的地址,全局只有一张GDT表
  • LDTR(局部描述符表寄存器): 存放的是局部描述符表LDT的地址,每个进程有一张LDT表
  • IDTR(中断描述符表寄存器): 存放的是中断描述符表IDT的地址,IDT表存放在内核代码段中

任务寄存器

任务寄存器TR中存放的是当前任务的TSS描述符

MSR 寄存器

MSR寄存器用于实现快速系统调用,将系统调用程序的信息直接写在寄存器中,就不再需要内存查表

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.6