完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以下说的都是与C51相关的: 我有个C文件(a.c),我用keil编译它,烧进单片机,他是能够正常执行的。然后我用反汇编工具得到c文件对应的汇编文件a.asm,这个汇编文件跟 我调试a.c程序时的汇编窗口内容一样(keil调试C程序时,会弹出一个汇编窗口的),我再用keil编译它,结果有错误:Temp.asm(1509): error A45: UNDEFINED SYMBOL (PASS-2) 我上网查过它的含义:意思是我跳转的地方不存在。我查了一下,确实不存在。 出错语句(蓝色字体): Q0C02: MOV @R0,A ;0C02 F6 DJNZ R0,Q0C02 ;0C03 D8 FD MOV SP,#23H ;0C05 75 81 23 LJMP Q0C46 ;0C08 02 0C 46 ;========================================================================== Q0C0B: LJMP Q0EF7 ;0C0B 02 0E F7 ;========================================================================== Q0C0E: CLR A ;0C0E E4 .... LJMP Q0C0A ;0F0D 02 0C 0A 但是调试C程序,汇编窗口也有这一句汇编(蓝色字体): C:0x0F04 AF19 MOV R7,0x19 C:0x0F06 AE18 MOV R6,Temputer(0x18) C:0x0F08 120C8B LCALL deal(C:0C8B) 161: } C:0x0F0B 80EA SJMP main(C:0EF7) C:0x0F0D 020C0A LJMP C:0C0A 为什么C语言能通过编译 下面为调试C程序图片: |
|
相关推荐
5个回答
|
|
这个没法解决,你只能从这个字节开始人工进行反汇编,而且还不能确定反汇编的结果是对的,有时根据编译的算法编译后,再反汇编,甚至会出现奇怪的运行过程,还不如直接写汇编程序,而且反汇编的程序仍遵循C的规则,所以会有冗余的代码,你会在饶了一圈之后才发现三、五行的反汇编程序实际可以用1、2行就写完了。
最佳答案
评分
|
||
|
||
C 变成反汇编,应该有一些编译器自己定义的东西,如果你直接复制成汇编,再编译肯定有一些不一样的地方,因为编译器对C的编译和汇编的编译肯定有一些不一样的地方 !
评分
|
||
|
||
这个跟编译器的编译原理和方式有关,如果你用常规反汇编的方式,你会发现跳转的位置其实是另一条指令的其中一个字节,所以如果你是查看其中一部分程序功能的话,可以用反汇编,如果想查看整个程序的话,反汇编就没太大意义了
评分
|
||
|
||
人中狼 发表于 2017-5-23 09:48 先说下我反汇编整个程序的原因。 我现在在做课设,规定要用汇编写代码。我想用C写代码,编译出可执行文件后,反汇编得到汇编代码。 我现在遇到的问题 , 就是跳转的位置是另一条指令的其中一个字节。如何解决这问题。 |
|
|
|
人中狼 发表于 2017-5-23 00:36 其实用C会不会比汇编好 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11787 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:57 , Processed in 0.672600 second(s), Total 87, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号