c語言編譯成匯編
① c語言是先翻譯為匯編語言嗎
通常所說的C語言編譯過程是這樣的:
先是預編譯處理(帶#符號的語句都在這個階段完成處理,包括文件包含、宏定義展開、條件預編譯、語法檢錯等等)->
再是編譯階段。就是將C語言按照合適的語句翻譯成匯編語言。->
再就是匯編編譯。 就是將上一步的匯編語言翻譯成機器碼,每個.c文件都得到相應的.obj(目標文件)->
接下來就是連接階段啦。就是將整個工程的.obj文件以及庫函數連接成最終的一個.bin(或者是.hex之類的)可執行文件。
放到合適的環境中,就可以執行這個文件啦。
② 如何將c語言程序轉成匯編語言程序。
如果是VC則在編譯器命令行參數再加 /FA 則會生成匯編代碼。如果參數是 /FAs 則會同時將源碼和匯編代碼。
/FA 程序集代碼;.asm
/FAc 機器碼和程序集代碼;.cod
/FAs 源代碼和程序集代碼;.asm
/FAcs 機器碼、源代碼和程序集碼;.cod
/Fa的用法
/Fa 為編譯中的每個源代碼文件創建一個源文件.asm。
/Fa文件名 將文件名.asm 放到當前目錄中。僅在編譯單個源代碼文件時有效。
/Fa文件名.擴展名 將文件名.擴展名放到當前目錄中。僅在編譯單個源代碼文件時有效。
/Fa目錄\ 為編譯中的每個源代碼文件創建一個源文件.asm,並將其放到指定目錄中。請注意必須有後綴反斜杠。只允許使用當前磁碟上的路徑。
/Fa目錄\文件名 將文件名.asm 放到指定目錄中。僅在編譯單個源代碼文件時有效。
/Fa目錄\文件名.擴展名 將文件名.擴展名放到指定目錄中。僅在編譯單個源代碼文件時有效。
如果你是用gcc 或 g++編譯器,如dev c++則加入命令行參數 -S 即可
③ 如何將c語言變成匯編
理論上來說C語言改成匯編是完全可以的,當然實際上還是有一定難度。
1、完全手工根據C語言的流程和目的,改編成匯編語言,這樣做工作量很大
2、利用模擬軟體,在模擬環境下,是有相應的匯編代碼的,這樣做工作量相對較小,但可讀性較差。
④ C語言寫的程序 怎麼反匯編成匯編語言
在keilc中,單片機的C語言程序可以再DEBUG模式中得到對應的匯編程序。步驟如下:
1、建立工程,導入C文件代碼,編譯生成hex文件。
3、點擊View--Disassembly Window調出匯編窗口,如上圖。
通過以上步驟就可以看到與C對應的匯編程序了。
⑤ 先生們,女神們,快來看啊…… 請問下,c語言通過編譯器轉換成匯編語言,那電腦是怎樣聽懂匯編語言呢說
1、比如彈出光碟機,學過高中物理應該知道電生磁,實際上就是個發動機,將電能轉換成機械能。
2、要弄懂這個問題,舉個 ia32 windows平台上的例子,我也只能大體上說一下,具體的細節在這里是說不完的。。以c++源碼
int main()
{
int a = 2;為例
}
經過編譯器,會生成匯編代碼:mov dword ptr ss:[esp-4], 2,匯編指令經過匯編器(即將匯編指令轉換成機器碼的程序)即C74424FC02000000這樣的機器碼,匯編指令生成的機器碼是有一定的指令格式的,你可以參考intel開發手冊,第一部分就有intel指令的格式。然後鏈接器根據生成的二進制文件,按照pe結構,生成一個exe文件。當你雙擊運行這個文件的時候,windows的pe loader 程序會將exe文件內存文件映射到虛擬內存中(即windows上的頁文件,也就是c盤中的pagefile文件),CPU的內部有一個震盪器(震盪器的原理很簡單,平時看到的電鈴就是這個原理),震盪器不斷的發送脈沖,每一次當脈沖為1時,CPU就會從內存中讀取指令,脈沖為1的時候,會根據內存中的地址匯流排,發送要取指的內存地址,這時候有一個解碼器,所謂的解碼器就是一種開關電路,比如有三個開關,當2個斷開1個閉合時,就表示成001,也就是取第一個單元的數據,這樣CPU將指令取得後,它會對指令進行解碼,解碼完後設置電路開關,然後將相應的數據放入到運算器中,運算器的實現,最早就是一個加法器。然後就是指令執行,執行完了,繼續取下一條指令。這就是存儲程序原理。
沒事歡迎來0x30網路貼吧,分享交流更多計算機編程知識。
⑥ 實踐,C語言是怎麼變成匯編的
c語言未必會經歷匯編語言這一環節,准確的說,c語言經歷編譯器(必須),鏈接器(某種程度上非必須)的處理,成為可執行代碼(一般是二進制代碼)。
而匯編也許是目前多數編譯器提供的中間環節(vc,vs都提供在調試運行下使用反匯編的功能),因為對於匯編語言來說,進一步編譯成機器語言的難度很低,只需查找有限的匯編指令對應的編碼,如MOV,ADD等,具體編碼與機器有關。
而你說的c語言變成匯編這一過程,正是編譯器的核心工作,也是最為困難的。需要對你的程序(本質上是一個超長的字元串)做分割,詞法分析,語法分析,最後翻譯成匯編。