指令集與組合語言
針對沒有M擴充的RV32I CPU,編譯C語言的「a * b」(int與int相乘)時,一般會變成什麼?
- A變成呼叫以重複位移與加法來進行乘法的函式庫函式
- B因為無法使用乘法,所以發生編譯錯誤
- C直接輸出M擴充的mul指令,並在執行時自動追加
查看答案與解析
正確答案:A. 變成呼叫以重複位移與加法來進行乘法的函式庫函式
針對沒有乘法器的CPU,編譯器會將乘法替換為呼叫__mulsi3這類輔助函式庫的函式。這個函式以與直式計算相同的方法求積:逐一檢查其中一個數的位元,若為1就加上另一個數位移後的值。雖然能正確計算,但會比硬體乘法器慢數十倍。省略ISA的擴充,電路會變小,代價是處理變慢。
- A. 正確。以軟體取代硬體來計算。
- B. C語言的乘法在任何CPU上都能使用。
- C. 執行不存在的指令,會變成非法指令例外。