天天看点

第27部分- Linux x86 64位汇编 寄存器第27部分- Linux x86 64位汇编 寄存器

第27部分- Linux x86 64位汇编 寄存器

64位时候X86处理器的寄存器如下图:

第27部分- Linux x86 64位汇编 寄存器第27部分- Linux x86 64位汇编 寄存器

《Computer Systems A Programmer's Perspective, 3rd Edition》文件中有这图。re

64和32位的差异是:

  • 64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e开头,而64位前8个使用了r代替e。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。
  • 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值
  • 64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用
  • 64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式。

继续阅读