麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

2. 程序編譯的四個階段

2019-11-06 07:19:07
字體:
供稿:網(wǎng)友

0.引言

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

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


1.編譯過程的四個階段

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

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

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

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

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


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

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


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

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


5.鏈接階段

printf函數(shù)存在于一個名為printf.o的單獨預(yù)編譯目標文件中。必須得將其并入到hello.o的程序中,鏈接器就是負責處理這兩個的并入,結(jié)果得到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ā)表
主站蜘蛛池模板: 精品一区二区久久久 | 最新se94se在线欧美 | 激情夜色| 国产精品毛片va一区二区三区 | 成人aaaaa片毛片按摩 | 男女羞羞视频在线观看免费 | 日本综合久久 | 欧美在线a | 美国黄色小视频 | 亚洲精品欧美在线 | 在线影院av | vidz 98hd| 国产乱淫av一区二区三区 | 蜜桃成品人免费视频 | 国产免费视频一区二区裸体 | 久久久日韩精品一区二区 | 91成人久久| 一色屋任你操 | 成人毛片网 | 日本网站一区 | 女人裸体让男人桶全过程 | 一区二区三区日韩在线 | 国产又粗又爽又深的免费视频 | 国产羞羞视频免费在线观看 | 成人羞羞视频在线观看免费 | 久久成年网站 | 欧美三级欧美成人高清www | 看毛片电影| 久久精品资源 | 九九热在线视频观看 | 国产一区二区视频精品 | 精品一区二区三区在线视频 | 国产一区免费在线 | 亚洲午夜视频 | 久久免费视频7 | 亚洲国产成人久久成人52 | 中文字幕在线免费播放 | 夜夜夜精品视频 | 日日摸夜夜添夜夜添牛牛 | 久久性生活免费视频 | 极品美女一级毛片 |