暫存器使用慣例

2021-06-12 06:43:06 字數 627 閱讀 7117

在給定的時刻只能有乙個過程是活動的, 它佔使用cpu的程式暫存器組. 程式暫存器組作為乙個單個資源被所有的函式過程共享.  所以, 我們必須保證: 乙個過程(呼叫者)呼叫另乙個(被呼叫者)時, 被呼叫者不會覆蓋某個呼叫者稍後會使用到的暫存器的值.

為此, ia32(俗稱x86)採用了一組統一的暫存器使用慣例., 所有的過程呼叫都必須遵守, 包括程式庫中的過程.

根據慣例, 暫存器%eax, %ecx, %edx被劃分為由

呼叫者儲存的暫存器

. 暫存器%ebx, %esi, %edi被劃分為

由被呼叫者儲存的暫存器

. 此外,

每個函式被呼叫時,須儲存暫存器%ebp和%esp.

int p()

過程p希望它計算出來的x值在呼叫了q之後仍然有效. 如果x放在乙個呼叫者儲存暫存器中, 而p(呼叫者)必須在呼叫q之前儲存這個值, 並在q返回之後恢復該值.

如果x在乙個被呼叫者儲存暫存器中, q(被呼叫者)想使用這個暫存器, 那麼q在使用這個暫存器之前, 必須儲存這個值, 並在返回前恢復它.

在這兩種情況中, 儲存就是將暫存器的值壓入棧中, 而恢復是指從棧中彈出到暫存器中.

《深入理解計算機系統》

暫存器使用

x64 體系結構提供了 16 個通用暫存器 以後稱為整數暫存器 以及 16 個可供浮點使用的 xmm 暫存器。易失暫存器是由呼叫方假想的臨時暫存器,並要在呼叫過程中銷毀。非易失暫存器需要在整個函式呼叫過程中保留其值,並且一旦使用,則必須由被呼叫方儲存。下表說明了每種暫存器在整個函式呼叫過程中的使用方...

組合語言之暫存器使用bx si di bp

自 如果你看到這篇部落格時正在做第七章問題,強烈建議先去把8.1 8.4看了,因為你在這章寫 踩的有關 的坑,在8.1 8.4都有說明,下面都是8.1的內容 暫存器的分類 暫存器主 要 用 途通用 暫存器資料 暫存器ax 乘 除運算,字的輸入輸出,中間結果的快取 al位元組的乘 除運算,位元組的輸入...

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

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