x64 體系結構提供了 16 個通用暫存器(以後稱為整數暫存器),以及 16 個可供浮點使用的 xmm 暫存器。
易失暫存器是由呼叫方假想的臨時暫存器,並要在呼叫過程中銷毀。
非易失暫存器需要在整個函式呼叫過程中保留其值,並且一旦使用,則必須由被呼叫方儲存。
下表說明了每種暫存器在整個函式呼叫過程中的使用方法:
register 狀態
用途rax
易失的
返回值暫存器
rcx
易失的
第乙個整型引數
rdx
易失的
第二個整型引數
r8
易失的
第三個整型引數
r9
易失的
第四個整型引數
r10:r11
易失的
必須根據需要由呼叫方保留;在 syscall/sysret 指令中使用
r12:r15
非易失的
必須由被呼叫方保留
rdi
非易失的
必須由被呼叫方保留
rsi
非易失的
必須由被呼叫方保留
rbx
非易失的
必須由被呼叫方保留
rbp
非易失的
可用作幀指標;必須由被呼叫方保留
rsp
非易失的
堆疊指標
xmm0
易失的
第乙個 fp 引數
xmm1
易失的
第二個 fp 引數
xmm2
易失的
第三個 fp 引數
xmm3
易失的
第四個 fp 引數
xmm4:xmm5
易失的
必須根據需要由呼叫方保留
xmm6:xmm15
非易失的
必須根據需要由被呼叫方保留。
請參見
參考x64 軟體約定
暫存器使用慣例
在給定的時刻只能有乙個過程是活動的,它佔使用cpu的程式暫存器組.程式暫存器組作為乙個單個資源被所有的函式過程共享.所以,我們必須保證 乙個過程 呼叫者 呼叫另乙個 被呼叫者 時,被呼叫者不會覆蓋某個呼叫者稍後會使用到的暫存器的值.為此,ia32 俗稱x86 採用了一組統一的暫存器使用慣例.所有的過...
組合語言之暫存器使用bx si di bp
自 如果你看到這篇部落格時正在做第七章問題,強烈建議先去把8.1 8.4看了,因為你在這章寫 踩的有關 的坑,在8.1 8.4都有說明,下面都是8.1的內容 暫存器的分類 暫存器主 要 用 途通用 暫存器資料 暫存器ax 乘 除運算,字的輸入輸出,中間結果的快取 al位元組的乘 除運算,位元組的輸入...
認識處理器 暫存器使用(待改)
對於乙個組合語言程式設計人員來說是不可或缺的。現在你知道,暫存器是處理器內部的一些儲存資料的儲存單元。僅僅了解這些是不足以寫出乙個可用的組合語言程式的,但你已經可以大致讀懂一般組合語言程式了 不必驚訝,因為組合語言的祝記符和英文單詞非常接近 因為你已經了解了關於基本暫存器的絕大多數知識。在正式引入第...