計算機系統漫遊 | 編碼原理與編譯系統

信息=位序列+上下文

  • 每一個二進制數字0或1表示一個位(比特),八個位組成一個字節。由程序員經過編譯器建立的文本文件稱爲源程序(如hello.c)。源程序實際上就是一個位序列,在位序列中,每個、兩個或四個字節表示一個文本字符。
  • 字符編碼
語言 字節關係 標準
英語 一個字節表示一個文本字符 ASCII
漢字 兩個字節表示一個文本字符 GB23十二、BIG五、Unicode...

下圖爲hello.c的ASCII碼錶示QQ圖片20200316083121.png
有關編碼的小知識:
GB2312編碼:簡體中文漢字編碼國家標準,漢字採用雙字節編碼。程序員

BIG5編碼:臺灣地區繁體中文標準字符集,採用雙字節編碼。函數

GBK編碼:1995年發佈的漢字編碼國家標準,是對GB2312編碼的擴充,對漢字採用雙字節編碼。包含國家標準GB13000-1中的所有中日韓漢字,和BIG5編碼中的全部漢字。編碼

GB18030編碼:2000年發佈的漢字編碼國家標準,是對GBK編碼的擴充,覆蓋中文、日文、朝鮮語和中國少數民族文字。GB18030字符集採用單字節、雙字節和四字節三種方式對字符編碼。兼容GBK和GB2312字符集。spa

Unicode編碼:國際標準字符集,它將世界各類語言的每一個字符定義一個惟一的編碼,以知足跨語言、跨平臺的文本信息轉換。翻譯

  • 只有ASCII字符構成的文件稱爲文本文件,其餘全部文件都稱爲二進制文件。
  • 由上,系統中全部信息,從文件、程序到數據,都是由位序列表示。
  • 區分不一樣數據對象的惟一方法:看數據對象的上下文。在不一樣上下文中,一個字節序列可能表示整數、浮點數、字符串、機器指令等。

編譯系統的工做過程

  • 在系統上運行hello.c程序時,先將c語句轉化爲彙編語句,再轉化爲一系列低級機器語言指令,最後將這些指令按照一種稱爲可執行目標程序的格式打好包,以二進制磁盤文件形式存放起來。
  • 從源程序hello.c到可執行目標文件hello,此過程共分爲四個階段完成。執行這四個階段的程序(預處理器、編譯器、彙編器、連接器)構成編譯系統。QQ圖片20200316091345.png
  • 預處理階段

預處理過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則以下:
①將全部的#define刪除,而且展開全部的宏定義;
②處理全部條件編譯指令,如#if,#ifdef等;
③處理#include預編譯指令,將引用的頭文件插入到該預編譯指令的位置。
④刪除全部的註釋//和 /**/;
⑤添加行號和文件標識,如#2 「hello.c」 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時可以顯示行號信息;
⑥保留全部的#pragma編譯器指令,由於編譯器需要使用它們;調試

  • 編譯階段

生成彙編語言文件(彙編語言:以文本格式描述低級機器指令),以下圖QQ圖片20200316091806.pngcode

  • 彙編階段

將彙編語言翻譯成機器指令(機器指令是一串二進制碼)對象

  • 連接階段

連接器ld將各個目標文件組裝在一塊兒,解決符號依賴、庫依賴關係,並生成可執行文件。
如hello.c程序調用了printf函數,而printf函數存在於一個printf.o的文件中,而ld就負責將這個文件以某種形式合併到hello.o程序中,並最終獲得hello文件。blog

相關文章
相關標籤/搜索