keil4如何将c语言转换成汇编语言_有没有将c语言源代码转换成汇编语言的软件...

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 12:43   22   0

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

ssxian168

推荐于 2017.09.17

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:43% 等级:6

已帮助:257人

如果只是想得到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,内容如下

TITLECtoASM_test.c

.386P

include listing.inc

if @Version gt 510

.model FLAT

else

_TEXTSEGMENT PARA USE32 PUBLIC 'CODE'

_TEXTENDS

_DATASEGMENT DWORD USE32 PUBLIC 'DATA'

_DATAENDS

CONSTSEGMENT DWORD USE32 PUBLIC 'CONST'

CONSTENDS

_BSSSEGMENT DWORD USE32 PUBLIC 'BSS'

_BSSENDS

_TLSSEGMENT DWORD USE32 PUBLIC 'TLS'

_TLSENDS

FLATGROUP _DATA, CONST, _BSS

ASSUMECS: FLAT, DS: FLAT, SS: FLAT

endif

PUBLIC_main

EXTRN_printf:NEAR

_DATASEGMENT

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

ORG $+3

$SG42DB'CtoASM_test end.', 0aH, 00H

_DATAENDS

_TEXTSEGMENT

_argc$ = 8

_argv$ = 12

_i$ = -4

_mainPROC NEAR

; File CtoASM_test.c

; Line 1

pushebp

movebp, esp

pushecx

; Line 3

movDWORD PTR _i$[ebp], 0

jmpSHORT $L37

$L38:

moveax, DWORD PTR _i$[ebp]

addeax, 1

movDWORD PTR _i$[ebp], eax

$L37:

movecx, DWORD PTR _i$[ebp]

cmpecx, DWORD PTR _argc$[ebp]

jgeSHORT $L39

; Line 4

movedx, DWORD PTR _i$[ebp]

moveax, DWORD PTR _argv$[ebp]

movecx, DWORD PTR [eax+edx*4]

pushecx

movedx, DWORD PTR _i$[ebp]

pushedx

pushOFFSET FLAT:$SG41

call_printf

addesp, 12; 0000000cH

; Line 5

jmpSHORT $L38

$L39:

; Line 6

pushOFFSET FLAT:$SG42

call_printf

addesp, 4

; Line 7

movesp, ebp

popebp

ret0

_mainENDP

_TEXTENDS

END

其中还可以产生其它文件,可以参考编译器的选项说明,命令行输入cl /?查看帮助,其中关于产生的输出文件类型可以有以下选择

-OUTPUT FILES-

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

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

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

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

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

补充,

其它平台的编译器也有类似的汇编输出选项,如类Unix平台的GNU编译器cc -S CtoASM_test.c和gcc -S CtoASM_test.c 都可以通过指定-S选项产生c或c++代码对应的汇编语言文件。

10分享举报

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP