我看過一些關于 ASM 編程的教程,而且我還處于初級階段。我有興趣學習 x86 ASM,具有 C 語言背景,并且我在計算機科學課程中做了一些初級 MIPS,這需要我撰寫非常基本的程式。我正在使用變數之類的暫存器,但沒有真正理解它們。
我不明白 ASM 中的暫存器是如何被如此自由地使用的,而我認為一個 CPU 可能只有八個通用暫存器,而用于特定用途的暫存器更少。
當然,在現代 Windows/Linux/OSX 系統上同時運行許多不同的程式這一事實,暫存器會很快被其他程式占用嗎?尤其是在運行大量 ASM 編碼程式時,每個程式都希望將 CPU 的暫存器用于不同的目的......
另外,我可以在 x86 ASM 中使用多少個暫存器是否有限制?如果我需要更多會發生什么,例如在 CI 中可能會創建幾乎無限數量的變數。
uj5u.com熱心網友回復:
Windows/Linux/OSX系統,暫存器會很快被其他程式占用嗎?
當作業系統從一個程式切換到另一個程式時(在同一個 CPU 上);它將前一個程式的值存盤在暫存器中(在 RAM 中),然后將下一個程式的值加載到暫存器中(從 RAM 中)。
另外,我可以在 x86 ASM 中使用多少個暫存器是否有限制?如果我需要更多會發生什么,例如在 CI 中可能會創建幾乎無限數量的變數。
是的,有一個限制(例如,32 位 80x86 限制為 7 個通用暫存器,而 64 位 80x86 限制為其中 15 個)。如果您創建更多變數,那么某些變數只會使用堆疊上的空間;并且編譯器可以隨時在堆疊和暫存器之間移動變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/468261.html
上一篇:將資料存盤在內回圈r
