【问题标题】:Is there any tool available to convert ASM to C for PIC 16F877A是否有任何工具可用于将 PIC 16F877A 的 ASM 转换为 C
【发布时间】:2011-02-21 19:58:09
【问题描述】:

我想将 ASM 文件转换为 C 程序。有没有可用的工具。 我的意图是将 PIC 16F877A 程序的汇编程序转换为 C 程序...

【问题讨论】:

  • 我对这个问题的标签有些困惑。为什么要标记它 8051?您要为其他处理器重新编译 C 代码吗?为什么选择实时操作系统?肯定不会尝试在处理器系列之间移植操作系统?
  • 我还想问为什么它有一个 RTOS 标签。谢天谢地,某个善良的灵魂将其移除。

标签: assembly embedded microcontroller pic


【解决方案1】:

自动将汇编转换为 C 的工具是一种反编译器。 x86 汇编语言有几个反编译器。 虽然我没用过,但我听说交互式反汇编程序 IDA 有一个反编译为 C 的选项,并且支持 Microchip PIC 汇编语言。

了解 PIC 汇编的人可以很好地手动将代码从 PIC 汇编移植到 C。 第一步是将“.asm”文件的内容复制到“.c”文件中,并用“asm”关键字包装它。使用SDCC 语法,生成的文件类似于:

// the_program.c
__asm  
    ; some assembler code
    goto $0056
__endasm;

您应该能够编译该“.c”文件并使用“diff”来确认它编译为相同的可执行文件。 人们有时可以将汇编程序的片段翻译成编译成相同可执行文件的 C 函数(使用“diff”进行比较)。 下一步通常看起来像

// the_program.c
__asm  
    ; some assembler code
__endasm; 
int main(void){
    for(;;){ // forever
    __asm  
        ; more assembler code
    __endasm;
    };
}
__asm  
    ; yet more assembler code
    goto $0056
__endasm;

从这里开始,你可以走两条路:

  • 如果您想在这个预先存在的汇编应用程序中添加一些 C 代码,并在相同 16F877A 处理器上运行它,请不要费心翻译大块的汇编语言 --将您的新代码粘贴在普通的 C 子程序中并从主 for() 循环中调用它。随着时间的推移,为了修复bug和添加特性,你可能会发现一次将几行从asm翻译成C很方便,也许有一天它会完全转换为纯C。但没有理由这样做一下子搞定。
  • 如果您想将此应用程序移植到一些完全不同的处理器上,最好在“.c”文件中注释掉所有汇编语言,并添加一个简单的闪烁主循环程序。使用汇编语言作为一般指导,一次编写一个或两个 C 函数,每次添加后在新处理器上运行和测试程序,直到您拥有足够的功能。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2010-12-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多