64 位下的寄存器
...大约 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