3

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

4

1 回答 1

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 函数,每次添加后在新处理器上运行和测试程序,直到你有足够的功能。
于 2010-05-22T19:53:28.703 回答