當前位置:編程學習大全網 - 源碼下載 - 有沒有將c語言源代碼轉換成匯編語言的軟件

有沒有將c語言源代碼轉換成匯編語言的軟件

如果只是想得到C語言或C++語言的匯編代碼

可以通過指定編譯器的選項來達成目的,這裏我們用1998年生產的Windows平臺VC6.0的SDK舉例(以傳統的命令行編譯環境方式,對應的IDE集成開發環境可在工程》設置裏在編譯選項裏加入/Fa即可):

開始》運行,輸入cmd啟動命令行,

若安裝了VC6.0的SDK(或其IDE集成開發環境),默認路徑為"C:\Program Files\Microsoft Visual Studio“

命令行輸入"C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"回車執行初始化編譯環境

命令行輸入 mkdir CtoASMTest建立測試目錄,並進入該目錄,命令行輸入 cd CtoASMTest

用記事本建立測試代碼,命令行輸入notepad CtoASM_test.c回車確認,輸入以下測試C代碼

int main(int argc,char* argv[]){

int i;

for(i = 0; i < argc; ++i){

printf("argv[%d] is:\t%s\n",i,argv[i]);

}

printf("CtoASM_test end.\n");

}

若直接默認編譯,命令行輸入cl CtoASM_test.c,則會產生對象文件*.obj和目標文件*.exe

命令行輸入dir 列出測試目錄文件清單如下,多了obj和exe編譯產生的文件

CtoASM_test.c

CtoASM_test.exe

CtoASM_test.obj

若想得到c文件對應的匯編語言文件,可以指定匯編文件產生選項 /Fa,即cl /Fa CtoASM_test.c則會同時產生匯編文件CtoASM_test.asm,內容如下

TITLE CtoASM_test.c

.386P

include listing.inc

if @Version gt 510

.model FLAT

else

_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'

_TEXT ENDS

_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'

_DATA ENDS

CONST SEGMENT DWORD USE32 PUBLIC 'CONST'

CONST ENDS

_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'

_BSS ENDS

_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'

_TLS ENDS

FLAT GROUP _DATA, CONST, _BSS

ASSUME CS: FLAT, DS: FLAT, SS: FLAT

endif

PUBLIC _main

EXTRN _printf:NEAR

_DATA SEGMENT

$SG41 DB 'argv[%d] is:', 09H, '%s', 0aH, 00H

ORG $+3

$SG42 DB 'CtoASM_test end.', 0aH, 00H

_DATA ENDS

_TEXT SEGMENT

_argc$ = 8

_argv$ = 12

_i$ = -4

_main PROC NEAR

; File CtoASM_test.c

; Line 1

push ebp

mov ebp, esp

push ecx

; Line 3

mov DWORD PTR _i$[ebp], 0

jmp SHORT $L37

$L38:

mov eax, DWORD PTR _i$[ebp]

add eax, 1

mov DWORD PTR _i$[ebp], eax

$L37:

mov ecx, DWORD PTR _i$[ebp]

cmp ecx, DWORD PTR _argc$[ebp]

jge SHORT $L39

; Line 4

mov edx, DWORD PTR _i$[ebp]

mov eax, DWORD PTR _argv$[ebp]

mov ecx, DWORD PTR [eax+edx*4]

push ecx

mov edx, DWORD PTR _i$[ebp]

push edx

push OFFSET FLAT:$SG41

call _printf

add esp, 12 ; 0000000cH

; Line 5

jmp SHORT $L38

$L39:

; Line 6

push OFFSET FLAT:$SG42

call _printf

add esp, 4

; Line 7

mov esp, ebp

pop ebp

ret 0

_main ENDP

_TEXT ENDS

END

其中還可以產生其它文件,可以參考編譯器的選項說明,命令行輸入cl /?查看幫助,其中關於產生的輸出文件類型可以有以下選擇

-OUTPUT FILES-

/Fa[file] name assembly listing file /Fo<file> name object file

/FA[sc] configure assembly listing /Fp<file> name precompiled header file

/Fd[file] name .PDB file /Fr[file] name source browser file

/Fe<file> name executable file /FR[file] name extended .SBR file

----------------------------------------------

補充,

其它平臺的編譯器也有類似的匯編輸出選項,如類Unix平臺的GNU編譯器cc -S CtoASM_test.c和gcc -S CtoASM_test.c 都可以通過指定-S選項產生c或c++代碼對應的匯編語言文件。

  • 上一篇:什麽是博客,博客有什麽功能,怎樣經營個人博客
  • 下一篇:要把機器出口到俄羅斯,客戶那邊要求 機器和包裝上面貼 EAC 指標,這個是什麽?
  • copyright 2024編程學習大全網