标题: 怎么将C语言转换为汇编语言,求大佬 [打印本页]

作者: happygo    时间: 2020-10-14 21:53
标题: 怎么将C语言转换为汇编语言,求大佬
怎么将C语言转换为汇编语言,求大佬给具体一点操作过程

作者: 51hei团团    时间: 2020-10-14 22:36
不能转的,放弃吧,只能从头开始重写汇编代码
作者: timer123    时间: 2020-10-15 00:12
1.使用gcc

        使用gcc -S 1.c可以把1.c转成特殊的1.s,感觉其实是类似于汇编,然后可以修改其代码,要想继续编译可以用gcc -s 1.s然后就可以实现

2.使用VC++ 编译器 自带的 dumpbin 就可以 做反汇编。
       如vc++中在C:\Program Files\Microsoft Visual Studio\VC98\BIN\DUMPBIN.exe
       dumpbin /DISASM abc.exe
       dumpbin /DISASM abc.exe /OUT:abc.asm

3.在vc或者vs的时候按alt+8可以进行汇编调试,不仅可以查看程序的汇编代码,而且也可以查看此时的变量。

4.通过修改项目 -> 属性 -> C/C++ -> 输出文件 -> 汇编输出之后,每次运行后都可以在debug下面找到一个asm文件
作者: hhdsdy    时间: 2020-10-15 00:13
打开KEIL,点击调试按钮 ,进入调试界面,就有对应的汇编程序了




作者: Y_G_G    时间: 2020-10-15 09:05
地板是正解
但是看为明白的,调试之后你就会发现:C里面的位移实际上是用加法来完成的,延时有时候是一大堆的NOP指令,这都是机器的算法,很难看明白的
作者: man1234567    时间: 2020-10-15 09:24
目前的技术,靠机器翻译的东东会让人一头雾水的,人类语言如此机器语言也一样。
作者: TTQ001    时间: 2020-10-15 10:08
编译C程序后,使用反向汇编语言工具获取汇编代码。
作者: hejianmin    时间: 2020-10-15 15:45
小程序可以,大程序就转出来,也没有啥用
作者: 谭路人甲    时间: 2020-10-15 16:16
貌似不能转的,还是老老实实学习汇编吧!
作者: yzwzfyz    时间: 2020-10-15 17:03
平台会自动生成,不用你动手。
作者: design003    时间: 2020-10-15 19:59
奇葩需求,自己重新编都比转过来好
作者: amandv    时间: 2020-10-15 21:23
我觉得你应该学好汇编直接用汇编写,不然C转的你会看了头晕的
作者: univers    时间: 2020-10-17 11:45
你能牛肉转换成猪肉,马肉转换成羊肉,她就能把C转换成汇编。
作者: 梁廷明    时间: 2020-10-17 13:44
用HEX文件生成的汇编文件,看起来也是头疼
作者: wmr2021    时间: 2020-10-17 14:31
地板是正解
但是基本上看不明白,调试之后你就会发现这些汇编仅供参考。。
作者: angmall    时间: 2020-10-17 15:34
KEIL原本就必须将C转成汇编,再转成机器码。在设置勾选项中(输出文件)中找找。
将C与其生产汇编对比,对于提升及理解C,有极大的好处。



就在 *.lst 文件里面,你可以打开 main.lst 看看

作者: 473737789    时间: 2020-10-19 10:51
1. 预处理:负责执行C语言中的#include, #if, #else 等预处理指令。注意,这里是去执行这些预处理指令。这些预处理指令的作用是根据你的系统环境配凑出最终版的源代码。

C语言

2. 词法分析:把你定义的函数名、变量名、预留的关键字等抽象化,用一个符号来代替,方便编译程序处理。例如上图中的main, return, printf等单词,都被看作一个符号,转换成M, R, P。在这个过程中,会检查你的变量名、函数名名称是否正确。

3. 语法分析:经过词法分析处理之后,程序代码已经变成一堆符号了,例如 I S T F ... M I R P(放心,人已经不认识了,但是计算机能认识)。这时的符号是打散的,语法分析负责把这些符号按照一定的结构组织起来,形成一个抽象语法树(这个结构跟你写的程序代码的结构是对应起来的)。

C语言

4. 语义分析:当构造出这样一个树的结构之后,编译就就会检查语法是否正确,并且去扫描这棵树。根据这棵树的结构,生成中间指令了。这个中间指令已经非常接近汇编。中间指令跟汇编还是有区别的,因为不同厂家的CPU指令有所不同,所以还要根据不同厂家的CPU指令集,把这个中间指令转换成汇编。

C语言

5. 优化:因为程序员有时代码写的不太好,会导致一些多余的操作,或者效率低的指令。优化过程可以找出这些毛病,自动替换成更好的指令。

6. 链接:以上过程只编译了一个模块,一个大型程序往往包含好多个模块。最后的链接过程负责把所有模块组装起来,构造出最后可以执行的程序。
作者: HAPPY3    时间: 2021-12-28 10:50
k5自带了汇编程序,不用转吧?
作者: SEMLCC    时间: 2021-12-28 11:03
用编译器就可以
作者: Hephaestus    时间: 2021-12-28 14:24
编译器有输出汇编的开关,看编译器手册吧。
作者: 无名氏1957    时间: 2022-2-4 23:52
用HEX文件反汇编, 就得到汇编文件了
作者: 无名氏1957    时间: 2022-2-4 23:53
用HEX文件反汇编, 就得到汇编文件了
作者: syygzx    时间: 2022-2-5 08:04
转出来的根实际的不一样,还是自已学吧
作者: ankangyu    时间: 2022-2-5 21:18
使用Keil软件中的调试功能可以直接转换,有时候需要一点点的修改




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1