找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4190|回复: 23
收起左侧

怎么将C语言转换为汇编语言,求大佬

  [复制链接]
ID:829993 发表于 2020-10-14 21:53 | 显示全部楼层 |阅读模式
怎么将C语言转换为汇编语言,求大佬给具体一点操作过程
回复

使用道具 举报

ID:328014 发表于 2020-10-14 22:36 | 显示全部楼层
不能转的,放弃吧,只能从头开始重写汇编代码
回复

使用道具 举报

ID:830046 发表于 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文件
回复

使用道具 举报

ID:88256 发表于 2020-10-15 00:13 | 显示全部楼层
打开KEIL,点击调试按钮 51hei图片20201015000751.png ,进入调试界面,就有对应的汇编程序了
51hei图片20201015001221.png


回复

使用道具 举报

ID:401564 发表于 2020-10-15 09:05 | 显示全部楼层
地板是正解
但是看为明白的,调试之后你就会发现:C里面的位移实际上是用加法来完成的,延时有时候是一大堆的NOP指令,这都是机器的算法,很难看明白的
回复

使用道具 举报

ID:584814 发表于 2020-10-15 09:24 | 显示全部楼层
目前的技术,靠机器翻译的东东会让人一头雾水的,人类语言如此机器语言也一样。
回复

使用道具 举报

ID:420836 发表于 2020-10-15 10:08 | 显示全部楼层
编译C程序后,使用反向汇编语言工具获取汇编代码。
回复

使用道具 举报

ID:342954 发表于 2020-10-15 15:45 | 显示全部楼层
小程序可以,大程序就转出来,也没有啥用
回复

使用道具 举报

ID:830326 发表于 2020-10-15 16:16 | 显示全部楼层
貌似不能转的,还是老老实实学习汇编吧!
回复

使用道具 举报

ID:123289 发表于 2020-10-15 17:03 | 显示全部楼层
平台会自动生成,不用你动手。
回复

使用道具 举报

ID:798631 发表于 2020-10-15 19:59 | 显示全部楼层
奇葩需求,自己重新编都比转过来好
回复

使用道具 举报

ID:414556 发表于 2020-10-15 21:23 | 显示全部楼层
我觉得你应该学好汇编直接用汇编写,不然C转的你会看了头晕的
回复

使用道具 举报

ID:382454 发表于 2020-10-17 11:45 | 显示全部楼层
你能牛肉转换成猪肉,马肉转换成羊肉,她就能把C转换成汇编。
回复

使用道具 举报

ID:235954 发表于 2020-10-17 13:44 | 显示全部楼层
用HEX文件生成的汇编文件,看起来也是头疼
回复

使用道具 举报

ID:818003 发表于 2020-10-17 14:31 | 显示全部楼层
地板是正解
但是基本上看不明白,调试之后你就会发现这些汇编仅供参考。。
回复

使用道具 举报

ID:155507 发表于 2020-10-17 15:34 | 显示全部楼层
KEIL原本就必须将C转成汇编,再转成机器码。在设置勾选项中(输出文件)中找找。
将C与其生产汇编对比,对于提升及理解C,有极大的好处。



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

使用道具 举报

ID:673169 发表于 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. 链接:以上过程只编译了一个模块,一个大型程序往往包含好多个模块。最后的链接过程负责把所有模块组装起来,构造出最后可以执行的程序。
回复

使用道具 举报

ID:981034 发表于 2021-12-28 10:50 | 显示全部楼层
k5自带了汇编程序,不用转吧?
回复

使用道具 举报

ID:953461 发表于 2021-12-28 11:03 | 显示全部楼层
用编译器就可以
回复

使用道具 举报

ID:883242 发表于 2021-12-28 14:24 | 显示全部楼层
编译器有输出汇编的开关,看编译器手册吧。
回复

使用道具 举报

ID:997051 发表于 2022-2-4 23:52 | 显示全部楼层
用HEX文件反汇编, 就得到汇编文件了
回复

使用道具 举报

ID:997051 发表于 2022-2-4 23:53 | 显示全部楼层
用HEX文件反汇编, 就得到汇编文件了
回复

使用道具 举报

ID:1003232 发表于 2022-2-5 08:04 | 显示全部楼层
转出来的根实际的不一样,还是自已学吧
回复

使用道具 举报

ID:587810 发表于 2022-2-5 21:18 | 显示全部楼层
使用Keil软件中的调试功能可以直接转换,有时候需要一点点的修改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表