組合語言與 CPU

CISC 對 RISC(x86-64 對 ARM)

/ SISK vs RISK /

設計指令集有兩種大方向,它們的差別就像瑞士刀對上一組簡單的單一用途工具。CISC(複雜指令集運算)偏好許多功能豐富的指令,有些一條就做好幾件事(單一指令可能讀記憶體、做算術、再寫回)。RISC(精簡指令集運算)偏好一小組簡單、整齊劃一的指令,例如只有專門的載入與儲存指令才碰記憶體,其餘一切都在暫存器之間運作。

x86-64(多數桌機與筆電的架構)是經典的 CISC 家族:指令長度不一、可以相當繁複,一條算術指令可能直接帶一個記憶體運算元。ARM/AArch64(手機、平板,以及越來越多筆電與伺服器的架構)是領頭的 RISC 家族:指令寬度固定、編碼規則整齊,且是載入—儲存設計,運算只在暫存器中發生。兩者並無單純的「孰優」:CISC 每條指令能表達更多(有利於程式碼密度),而 RISC 的規則性使指令更易於快速解碼與管線化。

對實務程式員而言,這個區別之所以重要,主要是因為它形塑了反組譯的樣貌、也解釋了同一個 C 程式在各平台上為何看起來不同——以及軟體必須分別為 x86-64 與 ARM 建構。乾淨的 CISC 對 RISC 界線在實務中其實也模糊了:現代 x86-64 晶片內部會把複雜指令拆成簡單、類 RISC 的微操作,所以即使外部 ISA 仍是 CISC,兩種哲學在中間相會。

在 x86-64 上 add rax, [rbx] 直接把一個記憶體值加進暫存器;AArch64 上的等效作法需要兩步——先 ldr x1, [x0] 再 add x2, x2, x1。

CISC 讓一條指令既碰記憶體又運算;RISC 把載入與算術分開。

RISC 不代表「手冊裡指令總數較少」——現代 ARM 的手冊很厚;它指的是更簡單、更整齊的指令(尤其是載入—儲存)。而「CISC 慢/RISC 快」是迷思:真實效能取決於微架構的程度,遠大於 CISC 或 RISC 這個標籤。

又称
complex instruction set computerreduced instruction set computerx86-64AArch64複雜指令集精簡指令集