国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

2. 程序編譯的四個階段

2019-11-06 07:19:07
字體:
來源:轉載
供稿:網友

0.引言

hello.c(源程序)是一條高級C語言程序,雖然它是以一種易讀的形式,讓人們容易理解。但是,它卻無法直接驅動硬件CPU直接執(zhí)行。為了我們編寫的hello.c程序可以被執(zhí)行,驅動硬件電路工作,hello.c程序必須經過一些列處理步驟,將源程序轉化為可執(zhí)行性的目標程序。

而我們知道,機器語言就是處理器可以直接理解(與生俱來就能理解)的編程語言,機器語言有時也被叫做原生代碼(Native Code)[1],而機器語言是一種以“0、1、0、1”的表現(xiàn)形式二進制代碼,因此源程序的編譯過程任務即就是:將以高級語言編寫的程序轉換為以二進制代碼的可執(zhí)行性目標程序


1.編譯過程的四個階段

源程序到目標程序執(zhí)行的四個階段如圖1所示,GCC編譯C源代碼有四個步驟:預處理—->編譯—->匯編—->鏈接。 圖1 程序編譯的四個階段

以源程序hello.c為例#include <stdio.h>int main(){

2.預處理階段(.c—.i)

編譯器將C程序的頭文件編譯進來,還有宏的替換,可以用gcc的參數(shù)-E來參看。

命令:unix>gcc –o hello hello.c 作用:將hello.c預處理輸出hello.i


3 編譯(.i—.s)轉換為匯編語言文件

這個階段編譯器主要做詞法分析、語法分析、語義分析等,在檢查無錯誤后后,把代碼翻譯成匯編語言[2]。可用gcc的參數(shù)-S來參看。 編譯器(ccl)將文本文件hello.i 翻譯成文本文件hello.s, 它包含一個匯編語言程序。 一條低級機器語言指令。 命令:gcc -S hello.i -o hello.s 作用:將預處理輸出文件hello.i匯編成hello.s文件


4.匯編階段(.s—.o)得到機器語言

匯編器as 將hello.s 翻譯成機器語言保存在hello.o 中(二進制文本形式)。


5.鏈接階段

printf函數(shù)存在于一個名為printf.o的單獨預編譯目標文件中。必須得將其并入到hello.o的程序中,鏈接器就是負責處理這兩個的并入,結果得到hello文件,它就是一個可執(zhí)行的目標文件。

[1] 矢澤久雄胡屹.計算機是怎樣跑起來的 : How computers work[M]:人民郵電出版社,2015. [2] Bryant RandalE.,O’Hallaron DavidR.,布萊恩特等.深入理解計算機系統(tǒng)[M]:機械工業(yè)出版社,2011.


上一篇:PAT 1121

下一篇:Django開發(fā)步驟

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 横峰县| 新乡市| 罗城| 武冈市| 五指山市| 金坛市| 承德市| 永兴县| 浮山县| 崇仁县| 海阳市| 忻城县| 雷波县| 葵青区| 东乌珠穆沁旗| 承德市| 玉溪市| 榆社县| 阿荣旗| 嘉禾县| 孝感市| 额尔古纳市| 陆河县| 抚顺县| 宜良县| 兴文县| 洪泽县| 平阴县| 安义县| 苍山县| 鸡西市| 休宁县| 清丰县| 阳东县| 宣城市| 定兴县| 沂水县| 嘉祥县| 张北县| 湾仔区| 祁连县|