Инструмент, который автоматически конвертирует сборку в 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 одновременно, запуска и тестирования программы на новом процессоре после каждого добавления, пока у вас не будет достаточной функциональности.