2015-06-18 111 views
3
pushq %rbp 
movq %rsp, %rbp 
subq $32, %rsp 

我對第三條指令中「$ 32」的解釋有很大疑問。來自搜索和博客的信息指出,在上面的第三條指令中,我們爲堆棧保留了一定的「字節」空間。從doc開始,%rsp是64位寄存器,%esp是32位。堆棧中的預留字節:x86彙編(64位)

「$ 32」是指32個字節?($ number表示常量?)如果是,那麼我們如何在64位寄存器上分配32個字節?以上說明來自「otool」。我正在使用macbook pro。

我只是想學習一些關於裝配的小東西。

謝謝。

+0

學習小東西會比國外拆卸更容易二進制一本書。 – a3f

+0

@ a3f這些說明也在書中。如果你知道,那麼你可以回答嗎?謝謝。 –

回答

1

「$ 32」是指32個字節?($ number表示常量?)如果是,那麼我們如何在64位寄存器上分配32個字節?

這些32字節沒有在64位寄存器上分配。它們被分配在堆棧上。通過降低堆棧指針(位於%rsp中),從%rsp到%rsp + 31的地址範圍可用於存儲數據。

+0

好吧,我明白了。那麼堆棧的大小是多少?誰決定?謝謝。 –

+0

簡短的回答,操作系統甚至你的編譯器。誰設置堆棧指針。 x86-32和x86-64之間的區別基本上是__how__你對待堆棧,而不是__size__。 – Fifoernik

+0

最後,我不需要分配這個大小,我只需要擔心stackpointer地址範圍?再次感謝。 –