我用谷歌搜索,发现数量惊人的轻率回复,基本上都是在嘲笑提出这样问题的提问者。
Microchip 免费提供一些源代码(我不想将其发布在这里,以防万一。基本上,谷歌 AN937,单击第一个链接,其中有一个“源代码”链接及其压缩文件)。它在 ASM 中,当我看到它时,我开始斗鸡眼。我想将其转换为类似于 c 类型语言的语言,以便我可以继续进行。因为诸如以下的行:
GLOBAL _24_bit_sub
movf BARGB2,w
subwf AARGB2,f
可能很简单,但对我来说毫无意义。
可能有一些自动 ASM 到 C 的翻译器,但我能找到的只是人们说这是不可能的。说实话,这不可能是不可能的。两种语言都有结构,并且该结构肯定可以翻译。
你绝对可以用汇编程序编写一个C程序。问题是它可能看起来不像你的想法,或者也许会。我的 PIC 生锈了,但使用另一个汇编器,假设你有
add r1,r2
在C中我们可以说变成
r1 = r1 + r2;
可能更具可读性。当值从内存跳转到寄存器并返回并且寄存器被重用时,您可能会失去对变量名称的任何感觉。如果您谈论的是旧图片,其中两个寄存器一个累加器和另一个寄存器,那么实际上可能会更容易,因为变量大部分都在内存中,您查看地址,例如
q = mem[0x12];
e = q;
q = mem[0x13];
e = e + q;
mem[0x12] = e;
冗长而冗长,但很明显 mem[0x12] = mem[0x12] + mem[0x13];
这些内存位置可能是变量,不会像具有一堆寄存器的处理器的编译 C 代码那样跳转。该图片可能会让您更轻松地找出变量,然后进行搜索并替换以在文件中命名它们。
您正在寻找的称为静态二进制翻译,不一定是从一个二进制文件到另一个二进制文件(一个处理器到另一个处理器)的翻译,但在这种情况下是从 pic 二进制文件到 C 的翻译。理想情况下,您希望采用应用笔记并使用微芯片工具将其组装成二进制文件,然后进行翻译。您也可以进行动态二进制转换,但您更不可能找到其中之一,而且它通常不会生成 C 语言,而是一个二进制文件到另一个二进制文件。有没有想过沃尔玛 15 美元的吃豆人和加拉加操纵杆是如何工作的?来自街机的 ROM 使用静态二进制翻译进行转换、优化和清理,并为手持设备中的新目标处理器编译了 C 或任何中间语言。我想并不是所有的都是这样完成的,但我很确定有些是这样完成的。
百万美元的问题,你能找到一个图片的静态二进制翻译器吗?谁知道呢,你可能必须自己写一个。猜猜这意味着什么,您编写一个反汇编程序,而不是反汇编为本机汇编程序语法中的指令(如 add r0,r1),而是让反汇编程序打印出 r0=r0+r1;当您完成这个反汇编程序时,您将非常了解 pic 汇编语言,因此您将不再需要 asm 到 C 的翻译器。你有一个先有鸡还是先有蛋的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)