2015-10-20 36 views
1

我寫了一個簡單的虛擬機,它有指令來操縱堆棧,將堆棧值存儲到寄存器,將堆棧值裝入堆棧,將值從寄存器移動到寄存器並設置寄存器值...我試圖寫一個非常簡單的編譯成這個VM字節碼的語言,我還沒有做過任何指令從地址到地址跳轉,但我覺得VM有足夠的字節碼來存儲變量值。如何用只有有限的寄存器存儲多個變量?

虛擬機有7個寄存器:a,b,x,y,z,j和i。但是,如果我有12個包含簡單整數的變量,我將如何將它們存儲在寄存器中?

我以前就讀過這篇文章,很多人都在談論寄存器分配 - 我不知道如何在代碼中實現它。我不知道我將如何開始,並且註冊分配器似乎相當複雜。

是否有任何(真的)簡單的寄存器分配器,我可以看看,或嘗試實現?任何人都可以貶低我的解釋,所以我可以嘗試執行一個?

謝謝。

回答

1

您可以將變量存儲在堆棧(或全局變量的靜態存儲區)中,而不是寄存器中。至少,主要是;優化器可能會選擇將一個或兩個常用變量保存在寄存器中,但在這一點上,如果我是你,我不會擔心。

寄存器用於在計算過程中保存中間結果。如果計算需要大量中間值,則可能會用盡變量,在這種情況下,您需要將某些值「溢出」到堆棧分配的臨時值中。

重新排序計算以儘量減少所需的推理數量很難。我建議從一個簡單的非最優策略開始。

七個寄存器並不多。爲什麼選擇這種極限虛擬機設計?也許你應該重新思考。

+0

哦,我明白了,所以將變量存儲到寄存器是一個優化的事情?唯一讓我困惑的是,如果你在棧上存儲一個變量值,你如何跟蹤它在堆棧中的位置以及它擁有的變量?我認爲7個寄存器看起來不是很多,但我沒有真正考慮任何設計 - 這只是一個自發的副項目 - 我可以輕鬆添加更多寄存器,但有多少個? – mosmo

相關問題