簡單聊聊C語言執行步驟
前面寫的那篇關于了解單片機底層邏輯文章因為涉及到“深奧”匯編語言所以看的人沒多少,理解了的朋友估計就更少了吧,最后剩下兩個問題也一直沒寫,今天就做個了結吧。 我們初學C語言時老師肯定講過C語言的執行過程:預處理——編譯——匯編——鏈接。 就這四個步驟,說簡單吧,應該就是賊簡單的; 說復雜呢,可以寫一本書,幸好已經有前輩寫了關于這一部分內容的經典巨著了。 所以今天又來推薦去讀書的,這本書被稱為龍書,叫做《編譯原理》,值得編程人員去讀,特別是計算機專業的研究生更值得一看了。 我寫的內容絕對不會比書中寫得詳細具體,所以今天這里就簡單說吧,用一張圖說明今天所有內容:
C語言程序執行流程圖
英文原圖
上圖已經很清楚的說明了C語言轉化匯編的方法以及匯編轉機器語言的方法了,所以問題可算是over了。
是否更加云里霧里
圖已看,問題關系也說明了,但更迷糊了不? 其實隨便一個C語言編譯器都能幫我們理解這個過程。 因為只要編譯C語言就不得不具備圖中的這些工具,不管是你用的是VC6.0,還是VS,或是GCC,甚至是Keil。
因為我們這里是講單片機所以接下來我們就以keil為例做個說明,先上個圖:
我們編譯通過的程序編譯器軟件會自動生成對應的文件,甚至在這個生成的文件中機器代碼都已經給到了我們,并且哪句C語言代碼對應的匯編指令都一一對應了。 所以通過這個文件我們就可以很清楚的知道C語言與匯編語言的對應關系,匯編語言與機器語言的對應關系。 通過分析這個文件就能幫我們更好的理解單片機的執行過程,也有助于我們進一步理解匯編語言。 到最后我們的程序成功編譯之后我們通常都是把HEX文件下載到單片機中運行,那hex文件又是怎么回事呢?
HEX文件解讀
在這里hex文件就是我們程序編譯出來的目標文件,它存儲的是一些按一定規則組合起來的機器代碼。 就像最原始的機器代碼是以紙為媒介存儲一樣,hex文件也相當于機器代碼的一種存儲媒介,當我們要將文件下載到單片機時,下載軟件會對其進行解析,最后將其存儲的機器代碼裝載到單片機的flash中。 當然HEX文件不止一種規則,不過我們一般用到的規則都是intel公司的,其他的規則可自行了解。 下面以intel公司的hex文件規則進行說明。
舉例一段HEX內容說明:
:0E00030075801175902275A03375B04480FE93
:030000000020011EA
:0C001100787FE4F6D8FD7581070200033B
:00000001FF
解釋:冒號為每行數據的開始符號; 藍色表示此行數據長度,十六進制,如0E就是14; 紅色是數據存放的地址,如0003; 粉紅色是表示數據類型,00表示數據記錄,01表示文件結束,02表示擴展段地址記錄,03表示開始段地址記錄,04表示擴展線性地址記錄,05表示開始線性地址記錄; 后面緊跟著的是N位數據,長度由藍色的長度位決定; 天藍色為校驗位。
對比這張圖片內容和上一張keil軟件生成的文件圖片你發現了說明信息?
我想通過今天的內容你心中應該對單片機代碼執行過程有一定了解了吧? 如果還是不懂,就多去調試一下代碼吧,調多了你自然而然就懂了。 另外,通過機械代碼我們也可以推導出匯編程序,進而可以編出C語言代碼。 到此你是否就懂了黑客破解軟件的原理了? 是否明白程序加密的重要性了? 是否懂了那些抄芯片的人工作內容是啥了嗎? 所以現在是否恍然大悟了呢? 總之懂得單片機底層原理對我們理解程序執行還是很重要的,當然這也是編譯原理的基礎。
-
單片機
+關注
關注
6039文章
44579瀏覽量
636462 -
C語言
+關注
關注
180文章
7608瀏覽量
137130 -
文件
+關注
關注
1文章
569瀏覽量
24769 -
keil
+關注
關注
68文章
1213瀏覽量
166983 -
編譯器
+關注
關注
1文章
1636瀏覽量
49173
發布評論請先 登錄
相關推薦
評論