Есть ли какой-либо инструмент для преобразования ASM в C для PIC 16F877A - PullRequest
3 голосов
/ 20 мая 2010

Я хочу конвертировать файл ASM в программу C. есть ли инструменты для этого. Мое намерение состоит в том, чтобы преобразовать программу сборки программы PIC 16F877A в программу C ...

1 Ответ

1 голос
/ 22 мая 2010

Инструмент, который автоматически конвертирует сборку в 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 процессоре, не пытайтесь переводить большие двоичные объекты на языке ассемблера - придерживайтесь Ваш новый код в обычных подпрограммах Си и вызывайте его из основного цикла for (). Со временем, для исправления ошибок и добавления функций, может оказаться удобным переводить несколько строк за раз из asm в C, и, возможно, когда-нибудь он будет полностью преобразован в чистый C. Но нет причин делать это. все сразу.
  • Если вы хотите портировать это приложение на какой-то совершенно другой процессор, вероятно, лучше всего закомментировать все язык ассемблера в файле ".c" и добавить простую программу основного цикла blinky-light. , Используйте язык ассемблера в качестве общего руководства для написания одной или двух функций C одновременно, запуска и тестирования программы на новом процессоре после каждого добавления, пока у вас не будет достаточной функциональности.
...