實際上,GCC 是一個適合多種 CPU 架構的編譯器,不會把C程式語句直接翻譯成目標機器的組合語言,而是在輸入語言和輸出組合語言之間,利用一個中間語言,稱為 RegisterTransfer Language(簡稱 RTL,暫存器傳輸語言)。借助於這個抽象層,在任何背景下,編譯器可以選擇最經濟的方式對給定的操作編碼。通常情況下,GCC 把組合語言輸出儲存到臨時檔案中,並且在組合器執行完後立刻刪除它們。但是可以使用
而且,在互動檔案中針對目標機器的抽象描述,為編譯器重新定向到新架構提供了一個結構化的方式。但是,從 GCC 使用者角度來看,我們可以忽略這個中間步驟。
-S
選項,讓編譯程式在生成組合語言輸出之後立刻停止。-S
選項的 GCC 編譯過程會為每個被編譯的輸入檔案生成以.s
作為字尾的組合語言檔案。如下例所示:
$ gcc -S circle.c
編譯器預處理 circle.c,將其翻譯成組合語言,並將結果儲存在 circle.s 檔案中。-fverbose-asm
選項:
$ gcc -S -fverbose-asm circle.c