2013-09-29 37 views
0

所以我在這裏面臨一個問題。我的指令集中只有25條指令(沒有乘法,除法,減法,遞增指令)。 現在,我正在嘗試執行一個二進制除法。我的問題是,如何知道除數是否小於分紅以便將它們相減(2的恭維形式)?兩個二進制數的除法

指令集: enter image description here

+1

我們如何能夠告訴你,如果我們不知道你做了什麼指示? – us2012

+0

@ us2012 ok會上傳。 –

+0

@ us2012更新後,請看看。 –

回答

2

我假設AC模擬它在兩個互補算術寄存器(累加器)。所以你需要的是一個SPA命令,而AC的結果是減去兩個數字。或者是一個SNA,取決於你從什麼中減去什麼。

同樣,你沒有減法。將其替換爲添加一個數字和另一個數字的負數。 Ferruccio說,負面就是補充加上兩個。

編輯:SPA/SNA的作品跳過下一個命令,如果AC是正面/負面。所以如果你想擁有一個非常重要的if語句,你會希望把一個Sxx後跟一個BUN(無條件地分支)。如果條件爲真,則跳過分支,如果條件爲假 - 則執行分支。

請注意,它是傳統裝配邏輯的倒置。通常情況下,如果條件成立,它就是「分支」;在這臺機器上,它是「分支,如果條件是錯誤的」。

爲了記錄,你的指令集是故意發育不良的。現實生活中的CPU比這更適合程序員,即使是RISC也是如此。

+0

它的-Mano機器;即使我不確定SPA.No文檔! –

+0

感謝您的參考:) –

2

許多指令都可以分解成簡單的指令。

看來你需要一個compare指令。

如果您沒有compare指令,則可以使用subtract對其進行仿真,並在減去後檢查處理器標誌的狀態。

您沒有subtract指令,因此您可以通過添加減去的值的負數來模擬它。

如果沒有negate指令,你可以通過翻轉所有位的值,並增加1

+0

在2的恭維中,我將如何知道除數是否更少?不會有任何額外的1位用於標誌嗎? –

+1

如果結果小於零,則扣除股息的除數,則除數小於股息。看起來您可以使用SPA或SNA說明。 – Ferruccio

+0

我不確定SPA和SNA在什麼時間應該有0 ot 1 –