X86-64的RIP可以切分成32位的EIP 和 16位IP,CPU是几位模式下就只能使用对应的指针寄存器。 状态寄存器(status register, RFLAGS) RFLAGS也有32位和16位版本,分别是EFLAGS 和 FLAGS。但是EFLAGS 和 FLAGS可以同时使用。 32位的状态寄存器 CF: 进位标志 PF : 奇偶标志 ZF : 零标志 SF : 符号标志 OF : 补码...
除了扩展原来存在的通用寄存器,x64架构还引入了8个新的通用寄存器: r8-r15 在原来32位时代,函数调用时,那个时候通用寄存器少,参数绝大多数时候是通过线程的栈来进行传递(当然也有使用寄存器传递的,比如著名的C++this指针使用ecx寄存器传递,不过能用的寄存器毕竟不多)。 进入x64时代,寄存器资源富裕了,参数传递绝大多数...
X86-64位通用寄存器 1. 通用寄存器 2. 段寄存器 3. 其它寄存器 4. 寄存器缩写含义 %ah中的h : High %al中的l : Low %eax中的e : Extend %rax中的r : 应该是Register,不确定 b : byte w : word 5. 函数调用中用到的寄存器 //伪代码func name(a, b, c, d, e, f) { return g; } 调用...
x86-64的通用寄存器 新增8个64位通用寄存器(整数寄存器) • R8、R9、R10、R11、R12、R13、R14和R15。 • 可作为8位(R8B~R15B)、16位(R8W~R15W)或 32位寄存器(R8D~R15D)使用 – 所有GPRs都从32位扩充到64位 • 8个32位通用寄存器EAX、EBX、ECX、EDX、EBP、 ...
x86_64共有16个通用寄存器 %rax,%rbx,%rcx,%rdx %esi,%edi,%rbp,%rsp %r8,%r9,%r10,%r11,%r12,%r13,%r...
add 函数返回时,把返回值保存到了 %eax 中,使用完返回值后,会恢复 caller save 寄存器 %eax的值,这时main 栈帧恢复到调用add函数之前的状态。 需要注意的是,在调用 add 之前,main 中执行了一条 subq 48, %rsp 的指令,这主要是因为main函数并未再调用其他函数,结尾处的leave、ret两条指令直接覆盖了%rsp的值...
X86_64,x86-64引技术实际上是在x86平台上从32位到64位的一次扩充。而这一扩充包含的内容能够不仅仅体现在对物理内存的扩充上,在指令集、CPU寄存器结构、甚至是应用程序的虚拟内存上都得到了非常大的扩充。然而,值得注意的是,x86从32位到64位的变化,并没有象以前从16位到
1.2 x86与x64下的通用寄存器 在x86下面,我们的通用寄存器有 代码语言:javascript 复制 eax ebx ecx edx esi edi esp ebp[e 代表Extend(扩展)] 在x64下面,新加了几个寄存器.并且指令变大了 有16个通用寄存器 代码语言:javascript 复制 rax rbx rcx rdx rsi rdi rsp rbp ...
X86-64中,所有寄存器都是64位,相对32位的x86来说,标识符发生了变化,比如:从原来的%ebp变成了%rbp。为了向后兼容性,%ebp依然可以使用,不过指向了%rbp的低32位。 X86-64寄存器的变化,不仅体现在位数上,更加体现在寄存器数量上。新增加寄存器%r8到%r15。加上x86的原有8个,一共16个寄存器。