2012-09-13 59 views
-5

我看到代碼push ecx,我不知道它的目的。它是否將ecx的價值改變爲其他東西?推ecx做什麼?

+4

您應該寫一些關於您看到此指令的內容以及您已經瞭解的關於彙編語言的內容,而不是在您的問題中填入無意識的複製粘貼。 –

+0

@HenningMakholm但是這需要努力,我們不能那樣做! –

+2

+1爲手柄的名稱 – Walter

回答

14

它推動堆棧上的值ecxecx是一個x86 CPU寄存器,它可以保存一定數量的位(32位或64位(在當前的x86 CPU上稱爲rcx))。

調用棧分爲棧幀。當一個函數被調用時,堆棧框架被創建,參數被傳遞到函數的堆棧上,然後函數被執行。在函數運行時,本地函數變量也使用pushpop存儲在堆棧中。 push東西放在堆棧上pop取最後放在它上面的東西,退回

你必須想象堆棧像一疊盤子,你把它放在頂部,(推),然後你再次拿起同樣的一塊(流行),然後才能到達下一個。

導致當前正在運行的函數的函數都在這個堆棧上,並且如果你喜歡的話,它位於當前函數棧幀的「下面」。當前函數返回時,它從堆棧中彈出(堆棧幀被銷燬),並且調用者函數可以繼續停止。

爲了解釋的緣故,我簡化了一些位。

+1

'ecx'總是32位,'rcx'將是x86-64 64位的等價物。 –

+0

@PaulR我在我的帖子上做了一個小小的修改。 :) –

+0

@ JaggedO'Neill我沒有說'push'或'ecx'有任何堆棧框架的概念。我試圖用堆棧框架作爲例子來解釋它們。這並不意味着它們總是共存。 –