天天看點

第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的時候才會用到這種尋址方式。

繼續閱讀