堆疊機

上一章說明了把標記列傳換成抽象語法樹的演算法。在文法中考慮到運算子的優先順序,做出了讓*/+-先出現在末梢的抽象語法樹。但是要怎麼把樹轉換成組合語言呢?這章就是要說明這個轉換的方法。

首先,我們來想想為什麼不能用和加減法一樣的方法來轉成組合語言。在可以算加減法的編譯器中,是把結果放在 RAX 暫存器,在該暫存器上進行加法或減法的計算。也就是說編譯的程式中途能暫時紀錄的答案只有1個。

但是,包含乘除法的話,中途要紀錄的答案就不僅限1個了。舉例來說,考慮2*3+4*5這個算式,為了計算加法必須要有左右兩邊的計算結果,在算加法前要先算2*34*5。也就是說如果不能紀錄2個結果,就沒辦法算出全部的結果。

有種可以簡單進行這樣的計算的電腦叫作「堆疊機」(stack machine)。接下來我們暫時放下抽象語法樹,來學一下堆疊機。

Last updated