2014-02-08 35 views
0

作爲一個小項目,我一直在創建一個老式的微型計算機CPU仿真器,主要基於8080的架構。它的8位通用寄存器可以(「according to wikipedia」)用作「三個16位寄存器對」,以及常規的8位模式。這是我的問題。建模微機寄存器在內存中?

我的第一次嘗試建模這是個人命名的字節和短褲,它工作正常,直到我重新閱讀specs頁面,發現16位寄存器實際上並不是他們自己的東西。哎呀。

我現在想要的是一個字節數組,每個8位寄存器有一個位置,並且爲堆棧/指令指針保留兩個位置。這對於8位寄存器來說非常好用,而且管理起來很麻煩,但我實際上並不知道如何將兩個字節轉換爲內存中的短暫內容。這甚至有可能嗎?如果沒有,你有什麼建議如何做到這一點?

+3

考慮使用聯合。或者如果你想直接使用內存表示,一個指針。 –

+0

呃,我將如何去做一個指向不同類型的兩個變量的指針?我仍然在學習C++魔術。 – Lexusjjss

+1

基本上你會有兩個不同類型的指針和相同的內存地址。我不確定C++有多少推薦它用於這個任務。然而,這在C中是微不足道的,因爲在C中裸露的編程模型與您試圖模擬的那種硬件架構之間存在相似之處。當然,這種指針方法需要你的仿真和主機結構具有相同的字節序列......在目前這個時候很有可能。 –

回答

-1

通過將16位寄存器中第一個字節的地址強制轉換爲空指針並返回一個short來解決。不是非常類型安全,但嘿,它的工作原理。顯然,我只是在用錯誤的東西搜索。

+0

工會更優雅,但工作很好:) – Dougvj

+1

類型安全的傳統概念將在這裏開始對你不利,就像在構建仿真器一樣,你需要重現這樣的事實,即機器將解釋一個相同的位取決於正在執行的指令的各種方式。您已經知道寬度差異。但也要注意簽名/未簽名的。並不是所有的ALU操作都會有直接的C/C++同行 - 例如,您可以旋轉以及輪班。然後是進位 - 這可能包括或不包括在內。 –

+1

這不是類型安全的,在C++中是合法的,對不起。如果您嘗試在大型機器上運行該程序,它會中斷。 – Potatoswatter