匯編語言教程文件后綴大小寫S區(qū)別分析詳解
一、大小寫后綴的區(qū)別
.s 匯編語言源程序;匯編
.S 匯編語言源程序;預(yù)處理,匯編
小寫的s文件,在后期階段不在進(jìn)行預(yù)處理操作,所以我們不能在這里面寫預(yù)處理的語句在里面
大寫的S文件,還會(huì)進(jìn)行預(yù)處理、匯編等操作,所以我們可以在這里面加入預(yù)處理的命令
二、編譯的相關(guān)流程
預(yù)處理(Pre-Processing)-->編譯(Compiling)-->匯編(Assembling)-->鏈接(Linking)
1、預(yù)處理器
根據(jù)以字符#開頭的命令(directives),修改原始的C程序。
這個(gè)階段并不會(huì)去檢查代碼的錯(cuò)誤,只會(huì)把#的語句轉(zhuǎn)成C代碼。
2、編譯階段
在這個(gè)階段中,Gcc首先要檢查代碼的規(guī)范性、是否有語法錯(cuò)誤等,以確定代碼的實(shí)際要做的工作,在檢查無誤后,Gcc把代碼翻譯成匯編語言。用戶可以使用”-S”選項(xiàng)來進(jìn)行查看,該選項(xiàng)只進(jìn)行編譯而不進(jìn)行匯編,生成匯編代碼。匯編語言是非常有用的,它為不同高級(jí)語言不同編譯器提供了通用的語言。如:C編譯器和Fortran編譯器產(chǎn)生的輸出文件用的都是一樣的匯編語言。
3、匯編階段
匯編階段是把編譯階段生成的”.s”文件轉(zhuǎn)成目標(biāo)文件,讀者在此可使用選項(xiàng)”-c”就可看到匯編代碼已轉(zhuǎn)化為”.o”的二進(jìn)制目標(biāo)代碼了。
4、鏈接階段
將庫(kù)函數(shù)(頭文件中用到的)等鏈接到目標(biāo)文件中。
在成功編譯之后,就進(jìn)入了鏈接階段。在這里涉及到一個(gè)重要的概念:函數(shù)庫(kù)
"stdio.h"中也只有該函數(shù)的聲明,而沒有定義函數(shù)的實(shí)現(xiàn),那么,是在哪里實(shí)現(xiàn)”printf”這些庫(kù)函數(shù)的呢?最后的答案是:系統(tǒng)把這些函數(shù)實(shí)現(xiàn)都被做到名為libc.so.6的庫(kù)文件中去了,在沒有特別指定時(shí),gcc會(huì)到系統(tǒng)默認(rèn)的搜索路徑”/usr/lib”下進(jìn)行查找,也就是鏈接到libc.so.6庫(kù)函數(shù)中去,這樣就能實(shí)現(xiàn)函數(shù)”printf” 了,而這也就是鏈接的作用。
函數(shù)庫(kù)一般分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種。靜態(tài)庫(kù)是指編譯鏈接時(shí),把庫(kù)文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫(kù)文件了。其后綴名一般為”.a”。動(dòng)態(tài)庫(kù)與之相反,在編譯鏈接時(shí)并沒有把庫(kù)文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫(kù),這樣可以節(jié)省系統(tǒng)的開銷。動(dòng)態(tài)庫(kù)一般后綴名為”.so”,如前面所述的libc.so.6就是動(dòng)態(tài)庫(kù)。gcc在編譯時(shí)默認(rèn)使用動(dòng)態(tài)庫(kù)。
完成了鏈接之后,gcc就可以生成可執(zhí)行文件。
以上就是匯編文件后綴.s與.S區(qū)別分析詳解的詳細(xì)內(nèi)容,更多關(guān)于匯編文件后綴.s與.S的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺析ELF轉(zhuǎn)二進(jìn)制允許把 Binary 文件加載到任意位置
本文通過 eip + 偏移地址 實(shí)現(xiàn)了運(yùn)行時(shí)計(jì)算數(shù)據(jù)地址,不再需要把 Binary 文件裝載到固定的位置。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2020-02-02詳解匯編語言中中括號(hào)[]作用及l(fā)ea和mov指令的區(qū)別
這篇文章主要介紹了匯編語言中中括號(hào)[]作用及l(fā)ea和mov指令的區(qū)別,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01匯編語言基礎(chǔ)理解計(jì)算機(jī)底層技術(shù)原理
這篇文章主要為大家介紹了匯編語言基礎(chǔ),理解計(jì)算機(jī)底層原理,想要成為高級(jí)程序員,我們必須要學(xué)會(huì)匯編語言,匯編語言是非常重要的計(jì)算機(jī)底層技術(shù),一般用于底層的編寫2021-11-11UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP
這篇文章主要為大家介紹了UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06從匯編代碼開始全面解析synchronized還原最真實(shí)的偏向鎖
這篇文章主要為大家介紹了從模板解釋器匯編源碼開始分析還原最真實(shí)的偏向鎖實(shí)現(xiàn),解釋monitorenter字節(jié)碼命令的方法開始,從匯編代碼開始全面解析synchronized2022-02-02