我正在創建一個只有 16 條指令(4 位操作碼,4 位立即數)的指令集,因此我想知道是否可以同時使用 ADC(帶進位加法)和 SBC(帶進位減法)替換RWC(重復攜帶)。
如果最后一個加/減/rwc 指令是加法,RWC 將用作 ADC,使用它的進位。
如果最后一個加/減/rwc 指令是減法,RWC 將用作 SBC,使用其進位(也稱為借位)。
簡而言之,是否需要使用進位作為借位或借位作為進位(例如:“add a,b,c; sbc d,e,f;”或“sub a,b,c; adc d,e,f;")? 這種設計是否還有其他潛在的限制?
uj5u.com熱心網友回復:
它每隔一段時間就會發生一次。例如,sbc遵循 an的典型用例add是將進位具體化到暫存器中:
add r0, r1, r2 # r0 = r1 r2
sbc r3, r3, r3 # r3 = -1 if addition produced carry, 0 otherwise
另一個用例是adc用作左回圈進位,將位累加到暫存器中。要累積的位可能來自任意來源,并非所有來源都會導致指令前面有加法。
您應該考慮的另一個問題是,當中斷發生時,您需要記住是否剛剛發生加法或減法,以便rwc正確執行下一條指令。所以標志暫存器中必須有一個額外的狀態位來跟蹤它。
我的建議:不要執行此操作。而是將減法實作為不改變標志的反向減法(即dest = src - dest代替)。dest = dest - src然后,您可以通過首先從 1 中減去(以計算補碼)然后用進位進行加法來實作帶進位的減法。
另一種選擇是實作一個跳過指令,該指令檢查條件標志的條件并在滿足條件時跳過下一條指令。然后,您可以通過在執行加法adc或sbc減法之前有條件地跳過加或減 1 的指令(分別)來實作這兩者。但請注意,當輸入為 時,這將導致進位不同0,因此您可能需要調整設計。另一個副作用是你不再需要條件跳轉了。如果不是條件 無條件跳轉,則這些變為跳過。
與您之前的想法更接近的第三個選項是構建一個“應用進位”指令,該指令根據舊的進位修改前一條指令的結果。該指令將需要兩個額外的狀態標志(一個用于加/減,一個用于攜帶)但似乎更靈活。它還可以擴展為一般修飾符指令,例如區分ror和rcr和其他。
如果您正在為這種受限制的指令集尋找靈感,請考慮查看 PDP-8,這是一款只有 8 條指令但優雅地提供所有必需操作的著名計算機。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430126.html
上一篇:回傳特定位置的指標-程式集
