1. c語言轉換成匯編語言
win-tc
可以將C代碼編譯為匯編代碼。
在「運行」,「編譯配置」里選取中編譯目標為匯編文件。
另外,將其它語言編譯為匯編代碼不叫「
反匯編
」。
2. c語言編譯器是用匯編語言寫的嗎
這個是肯定的。演算法優化,首先是邏輯描述的精煉化。至於C,只是計算邏輯到計算機模式的一種映射,而匯編僅是利用特殊計算機指令的一個更深的藕荷。
不過有一點,C語言由於是計算邏輯到計算機模式的映射,所以不單單考慮演算法本身,還肩負數據組織的實現。數據流動方式,數據組織方式,對計算性能的影響也很大。這要看是否和計算機組成原理相貼近。其實這塊也是側重邏輯的設計,而不是具體機器指令的實現,因此匯編是無能為力的。
不過在DSP等特殊CPU架構,C語言和編譯器無法很好的將上述邏輯轉換為機器指令,或者C本身的邏輯無法很好的貼近CPU的特性,那麼還是得匯編。一個典型的例子就是如何使用DSP的並行指令(通常的矢量計算)和並發指令集,幾個不同的指令(隸屬不同處理單元)的同時執行。使用C語言無法描述清楚這些邏輯方式,而編譯器又太水,則還是不得不用匯編。此時C語言僅能淪落到大的計算機組織特性的貼近,和整體框架,模塊的設計上。細節方面無能為力了。
3. c語言編譯成軟體的時候不是已經翻譯成匯編了嗎可是為什麼匯編可以可移植性差
匯編語言和機器語言在同一硬體平台上可以一一對應,問題是不同硬體平台的機器語言是不同的,匯編指令也各有差異,這就直接導致了匯編不具有可移植性
C的話也只是相對於匯編這樣的低級語言有較好的可移植性,作為高級語言中的低級語言,可移植性和近代新產生的高級語言相比,還是有差距的
4. C語言為什麼要先編譯成匯編語言
C語言,具有可移植性,或者說同樣的代碼可以在不同cpu平台上運行得到同樣的結果
匯編語言,移植性差,一般針對某型cpu,每個類型的cpu都有自己的匯編語言
為保證C語言編制的通用演算法的可移植性,比如我們用C編寫了一套mp3解碼演算法程序,要在pc機上、手機上都能用,那麼我們就採用通用的C編譯器,將C語言程序編譯成指定CPU的匯編語言,再匯編成機器可執行程序。
另一個用途是程序優化問題,在C語言層次,由於是高級語言,不涉及底層硬體,那麼底層硬體的特性不能夠得到充分利用,在需要優化演算法的場合,我們需要將C語言演算法編譯生成匯編程序,然後修改需要優化的匯編程序達到目的。比如,你在手機上經常會遇到音頻解碼器,需要安裝,而且不同的cpu需要選擇不同的解碼器,這些解碼器應當就是在匯編層次上優化了演算法的可執行代碼,關鍵部分經過匯編級優化,不需要優化部分仍然使用C語言編譯的結果。
5. 請問如果C,C++經過編譯成為匯編語言,那麼JAVA是不是經過編譯也編程匯編語言了呢
先糾正前半句,C/C++最終會編譯成機器語言(CPU可直接識別的、比匯編還低級的指令符)
然後是Java,Java的編譯只會生成位元組碼文件,而不會生成匯編(更不會到機器語言)。Java程序運行時,位元組碼文件會裝載入java虛擬機,虛擬機實時將位元組碼「翻譯」成機器指令來運行
6. 單片機中,怎樣把C語言轉化為匯編語言
單片機是沒這個能力將C語言轉換為匯編語言的,它只知道執行1或0。
匯編語言和C語言都是我們用來跟單片機溝通的語言
只有用軟體來編譯為單片機可執行的1,0文件
單片機才能運行。
所以要c語言編譯為匯編語言是我們所用到的編譯器做的事情,比如說
keil
iar
gcc
等的編譯器他們都支持C語言編譯為匯編語言
並可生成單片機可執行文件。不同的單片機所用的編譯器或許不同
7. 如何將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 即可
8. C++程序進行編譯後會生成C語言代碼還是匯編代碼
不會是這兩種語言代碼,而是編譯後直接生成二進制文件(.OBJ文件),再通過連接器鏈接成二進制文件(.EXE/.DLL/.OCX/.SYS等)
9. C語言和匯編語言的關系
程序員編寫的C語言代碼,首先要經過C語言編譯器,生成匯編代碼,這個過程稱為編譯階斷,當C語言編譯器生成匯編代碼後,再調用匯編器來將匯編代碼編譯成匯編指令。
這是一種站在巨人肩人的作法,最早的C++編程語言也是這樣的實現方法,只不過那時候叫Cfront程序,Cfront程序的作用是將C++代碼轉換成C語言代碼,類似於一個文本處理器,然後再調用C語言編譯器,將C源碼編譯成匯編代碼,然後再調用匯編器將匯編代碼編譯成機器碼。
這個過程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc這款c語言編譯器為例,它實際上是四個小程序。
cp: c語言預處理程序,有它負責進行預處理操作。
cc: C語言編譯器,它負責將C源碼編譯成匯編代碼。
as: 匯編器,它負責將匯編代碼編譯成機器碼,一般使用gcc test.c這樣的命令編譯C語言時,會生成一個a.out的程序,它實際上指的就是as ouput,即匯編器輸出文件。
link: 鏈接器,它負責將匯編器輸入的機器碼和庫打包成一個操作系統可以運行的可執行文件,在Linux上的可執行文件格式是ELF格式,這個格式的實現是有鏈接器來完成的。
10. c語言是先翻譯為匯編語言嗎
通常所說的C語言編譯過程是這樣的:
先是預編譯處理(帶#符號的語句都在這個階段完成處理,包括文件包含、宏定義展開、條件預編譯、語法檢錯等等)->
再是編譯階段。就是將C語言按照合適的語句翻譯成匯編語言。->
再就是匯編編譯。 就是將上一步的匯編語言翻譯成機器碼,每個.c文件都得到相應的.obj(目標文件)->
接下來就是連接階段啦。就是將整個工程的.obj文件以及庫函數連接成最終的一個.bin(或者是.hex之類的)可執行文件。
放到合適的環境中,就可以執行這個文件啦。