指令集架構(ISA)

微運算

/ MY-kroh-op /

微運算是處理器實際執行的一個微小、簡單的內部運算,從你寫的指令裡拆解出來。想像一個複雜的食譜步驟「做一個三明治」被廚房悄悄展開成「拿麵包、抹奶油、加餡料、合起來」——一些小而一致、線上廚師能管線化的動作。許多現代處理器正是這麼做:你程式裡的指令是那個食譜步驟;微運算則是硬體真正去跑的簡單動作。

這對像 x86 這樣的 CISC 機器最為重要,因為它們的指令可能複雜且變長。晶片的解碼器把每一條這樣的指令拆成一或多個微運算——每個都像一條 RISC 指令那樣簡單而規律(一次載入、一次加法、一次儲存)——接著一個快速、RISC 風格的後端便調度並執行這串微運算,常是亂序的。一條複雜的「讀記憶體、加、寫記憶體」指令可能變成三個微運算;一條簡單指令可能就一個。即便是 RISC 晶片,有時也會把少數指令拆成微運算,但這項技術最常與「讓 CISC 變快」聯繫在一起。

微運算是 RISC 與 CISC 界線模糊的具體原因:可見的 ISA 可以複雜,但底下的矽晶片跑的是簡單的類 RISC 運算。關鍵是,微運算是一個實作細節,對軟體完全隱藏——它們不屬於 ISA、各晶片之間不同、你也無法在程式中指名它們。(別把它們和微程式控制的歷史性「微碼」搞混,那是相關但不同的概念:微運算是現代亂序引擎所調度的那些簡單運算。)

x86 的「push」指令做兩件事:把堆疊指標減一段、再把一個值存到記憶體。解碼器通常把它拆成兩個微運算——一個減法、一個儲存——接著後端便能各自獨立地調度它們。

一條 CISC 指令變成數個簡單的微運算,讓 RISC 風格的引擎能加以管線化。

微運算對軟體不可見,也不屬於 ISA——它們在不同晶片世代與廠商間各異。程式從不以微運算為目標;它以架構指令為目標,由晶片決定如何把它們拆解。

又稱
micro-operationuopμop微指令微操作