我看到代碼push ecx
,我不知道它的目的。它是否將ecx的價值改變爲其他東西?推ecx做什麼?
推ecx做什麼?
回答
它推動堆棧上的值ecx
。 ecx
是一個x86 CPU寄存器,它可以保存一定數量的位(32位或64位(在當前的x86 CPU上稱爲rcx
))。
調用棧分爲棧幀。當一個函數被調用時,堆棧框架被創建,參數被傳遞到函數的堆棧上,然後函數被執行。在函數運行時,本地函數變量也使用push
和pop
存儲在堆棧中。 push
把東西放在堆棧上和pop
取最後放在它上面的東西,退回。
你必須想象堆棧像一疊盤子,你把它放在頂部,(推),然後你再次拿起同樣的一塊(流行),然後才能到達下一個。
導致當前正在運行的函數的函數都在這個堆棧上,並且如果你喜歡的話,它位於當前函數棧幀的「下面」。當前函數返回時,它從堆棧中彈出(堆棧幀被銷燬),並且調用者函數可以繼續停止。
爲了解釋的緣故,我簡化了一些位。
'ecx'總是32位,'rcx'將是x86-64 64位的等價物。 –
@PaulR我在我的帖子上做了一個小小的修改。 :) –
@ JaggedO'Neill我沒有說'push'或'ecx'有任何堆棧框架的概念。我試圖用堆棧框架作爲例子來解釋它們。這並不意味着它們總是共存。 –
- 1. mov [ebx + 0x18] ecx做什麼?
- 2. 推1比%ecx小1
- 3. movl(%eax,%edx,4),%ecx指令是做什麼的?
- 4. 推送什麼都不做
- 5. 「movl(%esi,%ecx,4),eax」意味着什麼?
- 6. 做minHeight做什麼?
- 7. 在objdump輸出中「-0x1(%edx,%ecx,1)」是什麼意思?
- 8. ds:esi + ecx + 7 - >它在彙編語言中意味着什麼?
- 9. 是什麼0D組裝意味着89 0D 0B00A85E - MOV [5EA8000B],ECX
- 10. mov eax,[ebx + ecx * 4]在NASM中的含義是什麼?
- 11. 爲什麼是兩個「03 8」和「01 C1」 =加ECX,EAX
- 12. WPF能做什麼和不做什麼?
- 13. 在Perl中做什麼=〜做什麼?
- 14. 什麼「?」做?什麼是__FILE__?
- 15. 什麼是setDetailItem:做什麼?
- 16. NASM:MOV上的SegFault ECX
- 17. 如何movl $ 0x41,%ecx
- 18. SIFT做什麼?
- 19. 什麼[System.SerializableAttribute()做
- 20. WT_EXECUTEINUITHREAD做什麼?
- 21. requirejs.config()做什麼?
- 22. BasicLSTMCell做什麼?
- 23. System.Concurrency.AsyncLock做什麼?
- 24. || =做什麼?
- 25. Notification.DEFAULT_VIBRATE做什麼?
- 26. android:layout_column做什麼?
- 27. Hibernate.initialize做什麼?
- 28. @SingleValueResult做什麼?
- 29. ``.`做什麼?
- 30. 塊做什麼?
您應該寫一些關於您看到此指令的內容以及您已經瞭解的關於彙編語言的內容,而不是在您的問題中填入無意識的複製粘貼。 –
@HenningMakholm但是這需要努力,我們不能那樣做! –
+1爲手柄的名稱 – Walter