編譯器的核心任務是把C程序翻譯成機器的彙編語言(assembly language)。彙編語言是人類能夠閱讀的編程語言,也是至關接近實際機器碼的語言。由此致使每種 CPU 架構都有不一樣的彙編語言。編程
實際上, GCC 是一個適合多種 CPU 架構的編譯器,不會把C程序語句直接翻譯成目標機器的彙編語言,而是在輸入語言和輸出彙編語言之間,利用一箇中間語言,稱爲 RegisterTransfer Language(簡稱 RTL,寄存器傳輸語言)。藉助於這個抽象層,在任何背景下,編譯器能夠選擇最經濟的方式對給定的操做編碼。
並且,在交互文件中針對目標機器的抽象描述,爲編譯器從新定向到新架構提供了一個結構化的方式。可是,從 GCC 用戶角度來看,咱們能夠忽略這個中間步驟。
一般狀況下,GCC 把彙編語言輸出存儲到臨時文件中,而且在彙編器執行完後馬上刪除它們。可是可使用-S
選項,讓編譯程序在生成彙編語言輸出以後馬上中止。
若是沒有指定輸出文件名,那麼採用-S
選項的 GCC 編譯過程會爲每一個被編譯的輸入文件生成以.s
做爲後綴的彙編語言文件。以下例所示:架構
$ gcc -S circle.c
編譯器預處理 circle.c,將其翻譯成彙編語言,並將結果存儲在 circle.s 文件中。
若是想把C語言變量的名稱做爲彙編語言語句中的註釋,能夠加上-fverbose-asm
選項:編程語言
$ gcc -S -fverbose-asm circle.c