精簡指令集的缺點是什麼?

如題,求完善著個問一直很想了解


瀉藥

個人覺得,是讓寫彙編程序的人感到很麻煩。

雖然不管是CISC還是RISC這種面向機器語言本來玩起來就很煩人。但你能想像么,連乘除指令都沒有的彙編指令,要對輸入的數據進行四則運算的時候,乘法用循環加法/循環移位,除法用循環減法/循環移位。C語言一個語句能搞定的事情,彙編要寫上十幾/幾十行……還有數據裝載和數據移動的那些指令玩起來就更不用說了。

當年玩只有38條指令的PIC16系列MCU,要做數據濾波演算法的那個酸爽啊。為了整理清楚一個大循環,用了十幾頁的A4紙去畫流程。

不過現在好多的RISC指令的微控制器/微處理器都帶有乘法器了,但相對於X86架構的指令來說,在數據裝載移動等方面還是要多些一些指令,才能滿足同樣的功能。不過,現在能堅持寫彙編的人太少了。


CISC發命令:吃飯

RISC發命令:先拿起勺子——把手放到碗上方——舀一勺子飯——送到嘴裡。

所以在進行「吃飯」這個應用的時候,CISC只需要不斷地喊吃飯吃飯就行了,而RISC要不斷重複4個步驟,所以對於這種應用,CISC明顯更快。

但是如果要喝水,CISC就要先訓練你會喝水,然後直接發一個喝水命令。對於RISC,把步驟中碗改為杯子就行了,不需要任何前期訓練的負擔。

所以,隨著應用增多,CISC也要訓練更多不同的指令,所以越來越複雜。現在CISC好像也有一部分是RISC了吧


瀉藥。

RISC就是指令集少嘍。

有些一氣呵成的黑操作就不能一條命令執行完畢嘍。

例如傅立葉變換中的加成操作,你就得直接用現有的指令集模仿嘍。

就醬。


精簡指令集RISC的缺點應該是相對複雜指令CISC來說的。CISC對某一個特定的通用功能可能有一條專用的指令(處理器集成了實現相應功能的硬體),而RISC由於分得比較細,同樣的功能必須由多條指令組合完成,而且效率上比不上CISC實現相同功能的情況。


推薦閱讀:

複雜指令集在安卓上註定沒有用武之地嗎?
棧幀內返回地址是在local variables前還是在它們後面?
x86 指令集架構是否過時?
為什麼英特爾在精簡指令集上沒有作為?
CPU架構中的棧和寄存器?

TAG:中央處理器CPU | 龍芯 | 精簡指令集RISC |