




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
編譯過程C的標準庫許多通用功能例如:I/O,字符串處理,數(shù)學函數(shù)等一般由編譯器和操作系統(tǒng)的設計者提供頭文件.h文件包含函數(shù)聲明,預處理宏,以及其它信息不包含庫函數(shù)的源代碼標準庫中的函數(shù)按照功能分組每一組有一個相關的頭文件數(shù)學函數(shù),math.h標準I/O函數(shù),stdio.h編譯預處理、編譯和鏈接預處理器尋找以“#”開頭的預處理指令,根據(jù)預處理指令執(zhí)行與匯編語言中的匯編命令相似#defineXY用文本Y代替出現(xiàn)的與X匹配的任意文本#include<X.h>將頭文件X.h插入到源文件中編譯器目標模塊一段機器代碼主要階段分析讀入、分析和構造原始程序的內(nèi)部表示源程序被分解或者分析為其組成部分合成生成機器代碼如果需要,進行代碼優(yōu)化鏈接器庫的目標代碼根據(jù)計算機系統(tǒng)被保存在一個特定地方例如,在UNIX中,/usr/lib目錄動態(tài)鏈接動態(tài)鏈接庫[DLL]或共享庫,根據(jù)需要被“鏈接”示例:HelloWorld.c的編譯過程#include<stdio.h>intmain(){ printf("Hello,World!\n"); return0;}預處理和編譯 .data .align 2 LC0: .string "HelloWorld!"
.text .align 2 .globl main main: addi sp,sp,-8 #分配棧幀 sw ra,4(sp) #保存返回地址 sw fp,0(sp) #保存幀指針 addi fp,sp,4 #調(diào)整幀指針
la a0,LC0
#傳遞參數(shù)
call printf
#printf("Hello,World!\n"); li a0,0 #return0; lw ra,4(sp) #恢復寄存器 lw fp,0(sp) #恢復寄存器 addi sp,sp,8 #彈出棧幀 ret #返回匯編匯編器,生成一種可以重新定位的目標文件代碼區(qū):相對地址機器代碼解釋011111111100000010000000100010011addi sp,sp,-8400000000000100010010001000100011sw ra,4(sp)800000000100000010010000000100011sw fp,0(sp)C00000000010000010000010000010011addi fp,sp,41000000000000000000000010100110111luia0,0x01400000000000001010000010100010011addia0,a0,0x01800000000000000000000000010010111auipcra,0x01C00000000000000001000000011100111jalrra,0(ra)2000000000000000000000010100010011addi a0,zero,02400000000010000010010000010000011lw ra,4(sp)2800000000000000010010010000000011lw fp,0(sp)2C00000000100000010000000100010011addi sp,sp,83000000000000000001000000001100111jalrzero,0(ra)數(shù)據(jù)區(qū)相對地址數(shù)據(jù)的二進制表示數(shù)據(jù)001001000'H'101100101'e'201101100'l'301101100'l'401101111'o'500100000''601010111'W'701101111'o'801110010'r'901101100'l'A01100100'd'B00100001'!'C00000000null鏈接鏈接器將調(diào)用函數(shù)庫,通過重定位技術把目標文件合成可執(zhí)行文件對標記進行地址確定編譯器需提供目標文件,及符號表符號表標記:LC0,main,prinf可執(zhí)行文件,即計算機可以執(zhí)行的二進制指令序列Unix系統(tǒng),以.out為后綴的文件MS-DOS,后綴為.exe根據(jù)內(nèi)存分配規(guī)則,確定目標文件中的程序和數(shù)據(jù)的地址,從而確定出標記的地址例如LC0:0x00020A10main:0x000101B0printf:0x00010450可執(zhí)行文件代碼區(qū)絕對地址機器代碼解釋0x000101B011111111100000010000000100010011addi sp,sp,-80x000101B400000000000100010010001000100011sw ra,4(sp)0x000101B800000000100000010010000000100011sw fp,0(sp)0x000101BC00000000010000010000010000010011addi fp,sp,40x000101C000000000000000100001010100110111luia0,0x210x000101C410100001000001010000010100010011addia0,a0,-15200x000101C800101000100000000000000011101111jalra,0x2880x000101CC00000000000000000000010100010011addi a0,zero,00x000101D000000000010000010010000010000011lw ra,4(sp)0x000101D400000000000000010010010000000011lw fp,0(sp)0x000101D800000000100000010000000100010011addi sp,sp,80x000101DC00000000000000001000000001100111jalrzero,0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學歷史試題及答案解析
- java項目搭建面試題及答案
- 公共政策中的少數(shù)群體權益保障研究試題及答案
- 軟件設計師考試重要考點抓取技巧與試題與答案
- 社會治理中的公共政策創(chuàng)新方法試題及答案
- 軟件設計師考試重要趨勢及試題與答案
- 用戶習慣對軟件設計的影響及試題與答案
- 西方國家經(jīng)濟政策與政治動蕩的關系試題及答案
- 計算機三級軟件測試與公共政策實踐結合試題及答案
- 實戰(zhàn)演練機電工程考試試題及答案
- 中國銀行個人授信業(yè)務催收外包服務方案及措施
- 立方米臥式濃硫酸儲罐設計
- GB/T 30828-2014預應力混凝土用中強度鋼絲
- GB/T 28650-2012公路防撞桶
- 井下作業(yè)修井防噴演習手動雙閘板防噴器課件
- 《月光下的中國》朗誦稿
- MSA量測系統(tǒng)分析RMSA量測系統(tǒng)分析課件
- 麻醉與肝臟課件
- 《高等數(shù)學》全冊教案教學設計
- 工程樣板驗收表格
- 應急管理部《安全生產(chǎn)十五條措施》專題片
評論
0/150
提交評論