暫存器使用

2021-06-19 14:18:27 字數 1915 閱讀 6383

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位元組的乘 除運算,位元組的輸入...

認識處理器 暫存器使用(待改)

對於乙個組合語言程式設計人員來說是不可或缺的。現在你知道,暫存器是處理器內部的一些儲存資料的儲存單元。僅僅了解這些是不足以寫出乙個可用的組合語言程式的,但你已經可以大致讀懂一般組合語言程式了 不必驚訝,因為組合語言的祝記符和英文單詞非常接近 因為你已經了解了關於基本暫存器的絕大多數知識。在正式引入第...