微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于C51的汇编

关于C51的汇编

时间:10-02 整理:3721RD 点击:
我现在在做课设,规定要用汇编写代码。我想用keil写C程序,编译得到汇编代码。C程序编译出来的hex文件是能按我预期的去运行的。
但是同一程序的,用keil编译出来的汇编a.asm和b.asm(勾选Generate Assembler SRC File”和 “Assemble SRC File”),我建立新工程,把两个汇编加进工程中,编译,产生了好多警告
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C?FPMUL
    MODULE:  main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C?FPADD
    MODULE:  main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C?CASTF
    MODULE:  main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C?SIdiv
虽然能生成hex文件,但是把hex文件烧进单片机,它没我按照我预想的去工作,(C程序编译出来的hex文件是能按我预期的去运行的。)
问题一:我这样生成的汇编功能真的能跟C程序一样吗
问题二:我发现那些警告的意思是 有指令要跳转到不存在的地方,我在C程序调试的汇编窗口找到了那些地方,那些地方对应着  汇编的指令中间。也就是说跳转的位置是另一条指令的其中一个字节。怎么办

问题一,两种方式生成的HEX文件是不一样的。问题二,这个问题的解决难度大于自己动手直接写汇编程序。所以结论是自己动手写汇编程序吧,即使这种方法真成功了,高手一看就知道是C语言的反汇编,还是直接用汇编写的。

C与汇编编译后的程序都是一段数字代码。效果是一样的,但是代码可能会有个别地方不同。

楼上正解,君子坦荡荡,怎么能用反汇编呢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top