編譯器

關於中介表示之一的三位址碼(three-address code)的特徵,下列何者正確?

  1. A一個指令中可以含有任意多個運算或括號
  2. B一個指令最多由3個位址與1個運算構成
  3. C位址一定要寫記憶體的實體位址
查看答案與解析

正確答案:B. 一個指令最多由3個位址與1個運算構成

三位址碼會把複雜的運算式,分解成每個只有一個運算的簡單指令序列。例如 x = (a + b) * c 會變成 t1 = a + b 與 x = t1 * c 兩條,一條指令中出現的是結果與兩個運算元,最多3個位址。中間的值會給予暫時的名稱(t1等)。如此一來,計算的順序變得明確,也容易進行最佳化及轉換為CPU的指令。位址是變數或暫時的名稱,不是實體位址。

  • A. 一條指令中只有一個運算。
  • B. 正確。是由最多3個位址與1個運算構成的指令序列。
  • C. 位址是變數或暫時的名稱,不是實體位址。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 作為暫存器配置的準備而進行的存活區間(liveness)分析,所求的是下列何者?
  2. 某函式中,同時存活的值之數量在最多的地方是5個。在干涉圖除了這5個之外不產生其他限制的單純情況下,要讓所有值不溢出就放入暫存器,暫存器至少需要幾個?
  3. 將重複100次的迴圈,改寫成將主體並排4次份的迴圈展開,次數的判斷與分支會變成幾次?(假設100可被4整除)
  4. 從C語言的程式到產生執行檔的一般流程,下列何者正確?
  5. 透過小視窗檢視所產生機器碼的一小段序列,並將無用的指令組合替換為更好的指令,這種最佳化稱為什麼?

這個領域的比較