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或更高级的语言。