微處理器設計/ALU 標誌
外觀
< 微處理器設計
出於多種原因,從 ALU 匯出一些狀態程式碼非常重要,用於檢測錯誤和做出決策。
兩個值之間的比較通常透過減去它們來完成。我們可以透過檢查差值來確定兩個值之間的關係
- 如果第一個大於第二個,結果將為正
- 如果第二個大於第一個,結果將為負
- 如果兩個相等,結果將為零。
確定兩個值是否相等,需要 ALU 確定結果是否為零。這可以透過將結果的每一位饋送到一個 NOR 門來實現。這樣做的好處是,一個單一的多分支 NOR 門比一個完整的等效二埠門陣列需要更少的硬體。
瞭解加法或乘法的結果是否大於最大結果大小很有用。同樣,瞭解減法或除法的結果是否小於可能的值,從而導致下溢也很有用。可以使用兩個單獨的標誌表示這些情況,或者根據輸入操作以不同的方式解釋一個標誌。
此標誌指示操作結果是否大於累加器可以表示的值(進位/溢位)或小於累加器可以表示的值(借位/下溢)。軟體可以使用它來實現任意寬度的算術,例如“bignum”庫。
一些指令集引用了先前指令的 ALU 標誌
CMP R1,R2 // compare ... BEQ equal_routine // branch if equal
這樣的指令集迫使 CPU 設計人員將這些 ALU 標誌鎖存在某種“狀態暫存器”中,並非常小心地確保在中斷例程期間可以儲存這些標誌。
其他指令集永遠不會引用先前的 ALU 標誌——它們總是使用與它們計算時相同的指令中的 ALU 結果
BEQ R1,R2,equal_routine // compare and branch if equal
或者
SKEQ R1,R2 // compare and skip next instruction if equal JMP equal_routine
一些 CPU 設計人員更喜歡永遠不會引用先前 ALU 標誌的指令集。這樣的指令集使亂序執行變得更加簡單。許多 Chuck Moore 的 CPU 設計從未引用過任何先前指令的 ALU 標誌。