對於乙個程式,計算機語言是低階語言,而人利用高階語言與計算機互動,語言不通,則互動就會出現障礙,為了解決這種障礙,我們就需要把人的高階語言翻譯成機器語言,在一開始接觸計算機時,我們就知道計算機只能理解由0、1序列構成的語言,因此就有了以下語言的翻譯過程,我們也稱編譯執行原理。
用高階語言或者組合語言編寫的程式稱為源程式,源程式不能直接在計算機上執行;源程式可以說是乙個檔案,我們須得把該檔案轉成二進位制檔案,再載入到記憶體上去執行。
1、預編譯階段
2、編譯階段
編譯的主要目的是把源程式翻譯為二進位制檔案,其過程分為6個階段:
詞法分析:對源程式從前往後依次掃瞄,識別乙個個「單詞」符號,「單詞符號」是程式語言的基本語法單位(關鍵字、識別符號、常數、運算子、分隔符等)
語法分析:根據語言的語法規則將單詞符號串行分解成各類語法單位,通過語法分析確定輸入串是否構成乙個語法正確的程式
語義分析:主要分析程式中各種語法結構的語義資訊(型別分析和檢查錯誤)
中間**生成:中間**設計原則是容易生成及容易被翻譯成目標**
**優化:優化過程可以在中間**生成階段也可以是目標**生成階段,依據的原則是程式的等價變換規則
目標**生成:把中間**換成特定機器上的絕對指令**、可重定位的指令**或彙編指令**
符號表的作用:記錄源程式各個符號的必要資訊,以輔助語義的正確性檢查和**的生成
3、彙編階段
進行弱符號和符號表中外部符號處理, 指令段是虛假位址和偏移
4、鏈結階段
5、執行階段
在80386以前是實模式,80386以後是保護模式
a.建立虛擬位址空間和物理記憶體的對映(建立對映結構體pcb),建立頁目錄和頁表
b.載入指令和資料
實模式由於a對映到記憶體上後,可以通過跳轉到達b,修改b的資料,所以不安全
編譯鏈結執行原理 編譯鏈結執行過程
乙個.c cpp源程式檔案要最後變成.exe windows 或者.out linux 可執行檔案,要經過編譯和鏈結過程。四個步驟 預編譯,編譯,彙編,連線 一 預編譯 處理以 開頭的預編譯指令,比如 include,define等,規則如下 1 刪除所有的 define,並展開所有的巨集替換 文字...
編譯鏈結執行原理
預編譯.i 刪除 define 文字替換 處理 include 遞迴展開 處理 if end if等預編譯指令 刪除注釋 新增行號和檔案標識 保留 pragma 編譯.s 1.詞法分析 2.語法分析 3.語義分析 4.優化 5.生成彙編指令 低階語言 以下是彙編指令的 int main 彙編.o 翻...
C 編譯鏈結執行原理
1.預編譯 生成.i檔案 1.將所有的 define 刪除,並且展開所有巨集 2.處理掉所有條件預編譯指令,如 if ifdef elif else endif 3.處理 include 指令,這是乙個遞迴過程 4.刪除所有的注釋 和 5.新增行號和檔名標識 6.保留所有的 pragma編譯器指令,...