指针寄存器(instruction pointer, RIP.)X86-64的RIP可以切分成32位的EIP 和 16位IP,CPU是几位模式下就只能使用对应的指针寄存器。 状态寄存器(status register, RFLAGS) RFLAGS也有32位和16位版本,分别是EFLAGS 和 FLAGS。但是EFLAGS 和 FLAGS可以同时使用。 32位的状态寄存器 CF: 进位标志 PF : 奇偶标志 ZF :...
除了扩展原来存在的通用寄存器,x64架构还引入了8个新的通用寄存器: r8-r15 在原来32位时代,函数调用时,那个时候通用寄存器少,参数绝大多数时候是通过线程的栈来进行传递(当然也有使用寄存器传递的,比如著名的C++this指针使用ecx寄存器传递,不过能用的寄存器毕竟不多)。 进入x64时代,寄存器资源富裕了,参数传递绝大多数...
x86-64是1999年由AMD设计,AMD首次公开64位集以扩充给IA-32,称为x86-64(后来改名为AMD64)。AMD64架构在IA-32上新增了64位寄存器,并兼容早期的16位和32位软件,因此许多操作系统以及产品,尤其是在Intel开发Intel64之前就引入x86-64支持的,使用AMD64同时指代AMD64和Intel64。Intel64是后续支持了AMD64,不过不愿意叫...
32位的处理器运行在保护模式下时,除了先前的4个段寄存器,还引入了两个新的段寄存器FS/GS,这些寄存器都是16比特位宽。64位模式下的段寄存器有特殊性,后面有一节介绍。 IA-32处理器中的段寄存器(CS/DS/ES/SS/FS/GS)用于保存16位宽的段选择符(segment selector)。要访问存储器中的特定段,对应的段选择符必须...
1)6个寄存器用来保存参数,多出的参数类似x86入栈; 2)若存在闲置的寄存器的话,局部变量可以直接缓存到闲置寄存器中,过多局部变量类似x86入栈; 3)因为是64位,rsp栈指针每次移动8个字节:类似 movq -8(%rsp),%rsp 4)函数可以访问%rsp之后最多128个字节的内存:“红色区域”,意味着可以在通过%rsp的来在“红色区...
主要记录X86_64位CPU中常被使用的寄存器,以下将按照分类进行详解。通用寄存器 (general register) 是执行日常程序时最常接触的寄存器。16位的寄存器通常可以访问其高8位的数据;而32位寄存器则提供更广泛的数据存储能力。特殊寄存器 (Special registers) 包括 RFLAGS,其有32位和16位版本,分别是EFLAGS 和...
本文详细介绍了x86/x64架构中的各种寄存器,包括通用寄存器、标志寄存器、指令寄存器、段寄存器、控制寄存器、描述符寄存器、任务寄存器以及模型特定寄存器。在16位的8086架构中,通用寄存器是程序执行的核心,而32位的x86架构中,eip寄存器作为指令指针尤为重要。标志寄存器eflags记录指令执行状态,而控制寄存器如...
寄存器名称寄存器含义1寄存器含义2寄存器含义3 %rax 存储函数调用的返回结果 在imul 指令中,两个64位的乘法最多会产生128位的结果,需要 %rax 与 %rdx 共同存储乘法结果 在div 指令中被除数是128 位的,同样需要%rax 与 %rdx 共同存储被除数 %rsp 堆栈指针寄存器,通常会指向栈顶位置 %rbp 栈帧指针,用于标识...
寄存器 X86-64大约有16个64位整数寄存器,其中栈指针rsp和基址指针rbp较为特殊,rsi和rdi跟处理字符串相关。后面的八个寄存器是编号的,使用起来没有特殊限制。 rax rbx rcx rdx rsi rdi rbp rsp r8 - r15 其中rax的结构如下 [image:ECA803C6-AECB-4593-8CAA-34CF915FBC41-86030-0001242002E5C3CA/20171008192750...