標(biāo)題: 高級語言c [打印本頁] 作者: 51黑tt 時(shí)間: 2016-3-6 02:52 標(biāo)題: 高級語言c long long ago ,對于計(jì)算機(jī)而言,大部分是數(shù)學(xué)家在玩,與數(shù)字打交道,那時(shí)候是用01代碼編寫程序,terrible,有人發(fā)現(xiàn)這樣不行呀,01代碼沒有什么規(guī)律,記不住,所以有人想到,把01代碼總結(jié)成匯編語言,這樣為了方便人家記憶,提高編程效率,但是對于每種cpu而言,匯編語言都不一樣,都煩呀。。例如intel 的奔騰系列,AMD的cpu,intel還有其他的系列cpu,01代碼對應(yīng)的功能不一樣,所以匯編語言也不一樣,以我知道的為例。arm7,和51cpu匯編語言那是相差很遠(yuǎn)呀。。。完全不是一回事。arm7.arm9,arm11的匯編也不完全相同,也有差別,也要找到差別,哎、。、、剛才arm7和51,不形象,arm7和8086.夠形象吧。。。如果從8086匯編程序員轉(zhuǎn)到arm匯編程序員上,那完全是干另一件事呀。。。所以,01代碼和匯編語言都叫底層語言,機(jī)器語言。。
高級語言呢。。例如c語言,它是怎么運(yùn)行的了。也就是我個(gè)人的理解,例如你在IDE中寫一個(gè)c程序,IDE中包含了編譯器和編輯器,你點(diǎn)擊編譯按鈕,編譯器會把c語言編譯成bin(0,1)代碼,我估計(jì)的::編譯器有下列步驟
1.預(yù)處理 #include<stdio.h> #ifdef #endif and so on
2. 編譯 把c/c++代碼翻譯成匯編語言。 (這個(gè)匯編語言是對應(yīng)平臺的匯編語言) 平臺指對應(yīng)操作系統(tǒng)和cpu,對于pc機(jī),cpu就那么幾種,系統(tǒng)也是那么幾種了,例如你的pc機(jī)是xp,intelcpu ,編譯器就把c代碼翻譯成xp和inte cpu對應(yīng)的匯編語言了。
3.匯編, 把上面的匯編語言翻譯匯編成機(jī)器代碼(01)、,linux下一般表現(xiàn)為ELF目標(biāo)文件(obj文件)
4.連接。把程序的01代碼和庫文件的01代碼連接起來,構(gòu)成特定平臺上運(yùn)行的可執(zhí)行文件了。
如果 對arm_linux_gcc了解的話,就容易理解了,嘻嘻。。。arm_linux_gcc可以編譯c語言,arm匯編語言。裸機(jī)程序可以,也可以是應(yīng)用程序了,也就是arm上linux上的應(yīng)用程序。。。這就是平臺了。
這樣也就引出了交叉編譯了,什么是交叉編譯,也就是在一個(gè)平臺上編譯生成另一個(gè)平臺上運(yùn)行的可執(zhí)行程序。
在linux和intel平臺上編譯生成arm和linux的平臺的可執(zhí)行程序。。。
同時(shí)我回憶了下c#,先把 c# 源程序由編譯器生成中間代碼( microsoft intermediate language ) microsoft 中間代碼了, 我們的 exe 其實(shí)就是這個(gè)東西了,,在 xp 機(jī)子上點(diǎn)擊這個(gè)文件,就由。 Net framework 中的 Just-In-Time 編譯器就把這個(gè)中間代碼 MSIL 編譯為專用于 OS (這里指 xp 了)和目標(biāo)機(jī)器結(jié)構(gòu)的本機(jī)代碼了,這樣才可以執(zhí)行了。