c語言與匯編語言的轉換
⑴ keil怎樣把c語言轉換成單片機匯編語言
首先在keil里,設置選項時,在列表選項中的匯編代碼一項打勾。見下圖
然後編譯,編譯後,在工程的同一個文件夾下有一個.LST文件,打開就看到了匯編代碼,不過,需要自己進行整理,否則,是不能直接作為匯編程序的。
下面是一個例子:這是一個主程序的匯編代碼,格式就是這樣的。
; FUNCTION main (BEGIN)
; SOURCE LINE # 16
;---- Variable 'k' assigned to Register 'R4' ----
; SOURCE LINE # 17
; SOURCE LINE # 19
0000 D2B2 SETB light
0002 ?C0007:
; SOURCE LINE # 20
; SOURCE LINE # 21
; SOURCE LINE # 23
0002 7F05 MOV R7,#05H
0004 120000 R LCALL _delayms
; SOURCE LINE # 25
0007 300008 R JNB blink,?C0009
; SOURCE LINE # 26
; SOURCE LINE # 27
000A 0C INC R4
; SOURCE LINE # 28
000B BC2804 CJNE R4,#028H,?C0009
; SOURCE LINE # 29
; SOURCE LINE # 30
000E B2B2 CPL light
; SOURCE LINE # 31
0010 E4 CLR A
0011 FC MOV R4,A
; SOURCE LINE # 32
; SOURCE LINE # 33
0012 ?C0009:
; SOURCE LINE # 34
0012 20B7ED JB k0,?C0007
; SOURCE LINE # 35
C51 COMPILER V7.00 LIGHT1 09/14/2015 12:54:15 PAGE 3
; SOURCE LINE # 36
0015 B200 R CPL blink
; SOURCE LINE # 37
0017 200004 R JB blink,?C0012
001A D2B2 SETB light
001C 8002 SJMP ?C0014
001E ?C0012:
; SOURCE LINE # 38
001E E4 CLR A
001F FC MOV R4,A
0020 ?C0014:
; SOURCE LINE # 39
0020 20B7DF JB k0,?C0007
0023 80FB SJMP ?C0014
; FUNCTION main (END)
⑵ 51單片機,有了c語言的程序,如何把它變換成匯編語言
可以實現,但轉換的結果不是太理想,跟反匯編差不多,需要自己去整理,其轉移的標號需要自己重新定義,轉換結果里是用行地址替代的
⑶ 實踐,C語言是怎麼變成匯編的
c語言未必會經歷匯編語言這一環節,准確的說,c語言經歷編譯器(必須),鏈接器(某種程度上非必須)的處理,成為可執行代碼(一般是二進制代碼)。
而匯編也許是目前多數編譯器提供的中間環節(vc,vs都提供在調試運行下使用反匯編的功能),因為對於匯編語言來說,進一步編譯成機器語言的難度很低,只需查找有限的匯編指令對應的編碼,如MOV,ADD等,具體編碼與機器有關。
而你說的c語言變成匯編這一過程,正是編譯器的核心工作,也是最為困難的。需要對你的程序(本質上是一個超長的字元串)做分割,詞法分析,語法分析,最後翻譯成匯編。
⑷ 如何將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語言的,因為匯編代碼是低級語言,最接近於機器碼(具體可查看不同硬體平台的技術資料),每條匯編指令都對應一個固定的機器碼,這樣進行反匯編是可行的,而C語言屬於高級語言,編譯器沒有能力將匯編語言翻譯成C或更高級的語言。