乙個c/c++檔案要經過預處理(preprocessing)、編譯(compilation)、彙編(assembly)和連線(linking)才能變成可執行程式字尾名
語言種類
後期操作
.cc源程式
預處理、編譯、彙編
.cc++源程式
預處理、編譯、彙編
.ccc++源程式
預處理、編譯、彙編
.cxx
c++源程式
預處理、編譯、彙編
.mobjective-c源程式
預處理、編譯、彙編
.i預處理後的c檔案
編譯、彙編
.ii預處理後的c++檔案
編譯、彙編
.s組合語言源程式
彙編.s
組合語言源程式
預處理、彙編
.h預處理器檔案
通常不出現在命令列上
- .o: 目標檔案(object file,obj檔案)
- .a: 歸檔庫檔案(archive file)
引數說明
-c預處理、編譯和彙編原始檔,但是不做連線
-s編譯後即停止,不進行彙編
-e預處理後即停止
-o制定輸出檔名
-v顯示製作gcc工具自身時的配置命令
引數說明
object-file-name
如果某些檔案沒有特別明確的字尾,就認為它們是obj檔案或庫檔案
-llibrary
連線名為library的庫檔案
-nostartfiles
不連線啟動標準啟動檔案,標準庫檔案仍然正常使用
-nostdlib
不連線系統標準啟動檔案和標準庫檔案,只把制定的檔案傳遞給聯結器
-static
在支援動態連線的系統上阻止連線共享庫
-shared
生成乙個共享obj檔案,可以和其它obj檔案連線產生可執行檔案
-xlinker option
把選項option傳遞給聯結器。可以用來傳遞系統特定的連線選項,gcc無法識別這些選項。如果需要傳遞攜帶引數的選項,必須使用兩次」-xlinker」,一次傳遞選項,另一次傳遞其引數
-wl, option
把選項option傳遞給聯結器。如果option中含有逗號,就在逗號處分割成多個選項。
-u使聯結器認為取消了symbol的符號定義,從而連線庫模組以取得定義
引數說明
input-file、outfile
如果未指定outfile檔案,將生產檔案覆蓋為input-file
-i bfdname
指明原始檔的格式
-o bfdname
使用指定的格式來輸出檔案
-f bfdname
同時指明原始檔、目的檔案的格式
-r sectionname
從輸出檔案中刪除所有名為sectionname的段
-s或–strip-all
不從原始檔中複製重定位資訊和符號資訊到目標檔案中
-g或–strip-debug
不從原始檔中複製除錯符號到目標檔案中
引數說明
-b bfdname
指定目標碼格式
-d反彙編可執行段
-d反彙編所有段
-eb或-el
指定位元組序
-f顯示檔案的整體頭部摘要資訊
-h顯示目標檔案各個段的頭部摘要資訊
-i顯示支援的目標檔案格式和cpu架構
-j name
僅顯示指定section的資訊
-m machine
指定反彙編目標檔案時使用的架構
編號低的暫存器對應記憶體中的低位址單元
編號高的暫存器對應記憶體中的高位址單元
cpsr條件標誌位n、z、c、v分別表示negative、zero、cary、overflow條件碼
助記符含義
cpsr中條件標誌位
0000
eq相等
z = 1
0001
ne不相等
z = 0
0010
cs無符號數大於/等於
c = 1
0011
cc無符號數小於
c = 0
0100
mi負數
n = 1
0101
pl非負數
n = 0
0110
vs上溢位
v = 1
0111
vc沒有上溢位
v = 0
1000
hi無符號數大於
c = 1且z = 0
1001
ls無符號數小於等於
c = 0或z = 1
1010
ge帶符號數大於等於
n = 1,v = 1或n = 0, v = 0
1011
lt帶符號數小於
n = 1,v = 0或n = 0, v = 1
1100
gt帶符號數大於
z = 0且n = v
1101
le帶符號數小於/等於
z = 1或 n != v
1110
al無條件執行
-1111
nv從不執行
-暫存器
別名使用規則
r15pc
程式計數器
r14lr
連線暫存器
r13sp
資料棧指標
r12ip
子程式內部呼叫的scratch暫存器
r11v8
arm狀態區域性變數暫存器8
r10v7、sl
arm狀態區域性變數暫存器7,在支援資料棧檢查的atpcs中為資料棧限制指標
r9v6、sb
arm狀態區域性變數暫存器6,在支援rwpi的atpcs中為靜態基址暫存器
r8v5
arm狀態區域性變數暫存器5
r7v4、wr
arm狀態區域性變數暫存器4,thumb狀態工作暫存器
r6v3
arm狀態區域性變數暫存器3
r5v2
arm狀態區域性變數暫存器2
r4v1
arm狀態區域性變數暫存器1
r3a4
引數/結果/scratch暫存器4
r2a3
引數/結果/scratch暫存器3
r1a2
引數/結果/scratch暫存器2
r0a1
引數/結果/scratch暫存器1
所謂資料棧的增長就是移動棧指標。當棧指標指向棧頂元素(最後乙個入棧的資料)時,稱為full棧;當棧指標指向棧頂元素(最後乙個入棧的資料)相鄰的乙個空的資料單元時,稱為empty棧
綜合這兩個特點,資料棧可以分為以下4種:
fd:full descending,滿遞減
ed:empty descending,空遞減
fa:full ascending,滿遞增
ea:empty ascending,空遞增
atpcs規定資料棧為fd型別,並且對資料棧的操作是8位元組對齊的。使用s***b/ldmia批量記憶體訪問指令來操作fd資料棧
使用s***b命令往資料棧中儲存內容時,先遞減sp指標,再儲存資料;使用ldmia命令從資料棧中恢復資料時,先獲取資料,再遞增sp指標,sp指標總是指向棧頂元素。
嵌入式基礎知識
嵌入式處理器的分類包括三種,分別是 嵌入式微控制器 嵌入式微處理器 數字訊號處理器 安裝linux系統對硬碟分割槽時,必須有兩種分割槽型別 檔案系統分割槽 和交換分割槽 在vivi狀態下,顯示系統的分割槽命令是 part show。鏈結分為 符號鏈結 和硬鏈結 當gcc僅對原始檔進行編譯而不鏈結生成...
嵌入式系統基礎知識 了解嵌入式系統
嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...
嵌入式系統基礎知識 了解嵌入式系統
嵌入式系統用於大量電子裝置,它們的設計涉及到硬體和軟體技術。隨著計算機技術的進步,其技術也越來越多地嵌入到越來越多的電子產品中。嵌入式系統提供的功能是使電子裝置具有比僅使用硬體技術時更大的能力。因此,嵌入式系統可用於各種電子裝置和小工具中。從電子計時器等專案中的少量處理,到遊戲控制台甚至主要工廠和其...