Я хочу конвертировать ASM-файл в программу C. есть ли какие-либо инструменты для этого. Мое намерение состоит в том, чтобы преобразовать программу сборки программы PIC 16F877A в программу C ...Есть ли какой-либо инструмент для преобразования ASM в C для PIC 16F877A
ответ
Инструмент, который автоматически преобразует сборку в C, является своего рода декомпилятором. Существует несколько декомпиляторов для языка ассемблера x86. Хотя я не использовал его, я слышал, что IDA, интерактивный дизассемблер, имеет опцию декомпиляции в C и поддерживает язык ассемблера Microchip PIC.
Люди, которые знают сборку ПОС, могут выполнить довольно хорошую работу, вручную портируя код из сборки ПОС на C. Первым шагом является копирование содержимого файла «.asm» в файл «.c» и его упаковка ключевое слово «asm». С SDCC синтаксиса, результирующий файл будет выглядеть примерно так:
// the_program.c
__asm
; some assembler code
goto $0056
__endasm;
Вы должны быть в состоянии скомпилировать этот файл «.c» и использовать „дифф“, чтобы подтвердить, что он компилируется в идентичном исполняемый файл. Иногда человек может переводить кусочки ассемблера в функции 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(). С течением времени, чтобы исправить ошибки и добавить функции, вам может показаться удобным перевести несколько строк за раз от asm до C, и, возможно, когда-нибудь он будет полностью преобразован в чистый C. Но нет причин делать это это все сразу.
- Если вы хотите перенести это приложение на совершенно другой процессор, вероятно, лучше всего закомментировать все язык ассемблера в файле «.c» и добавить простую мигающую программу. Используйте язык ассемблера в качестве общего руководства для записи одной или двух функций C за один раз, запуска и тестирования программы на новом процессоре после каждого добавления до тех пор, пока у вас не будет достаточной функциональности.
Этот вопрос очень похож на http://stackoverflow.com/questions/1376856/convert-asm-to-c-not-reverse-engineer –
Я несколько озадачен тегами по этому вопросу. Зачем пометить его 8051? Собираетесь ли вы перекомпилировать код C для этого другого процессора? Почему RTOS? Наверняка не какая-то попытка портировать ОС между семействами процессоров? –
Я тоже собирался спросить, почему, черт возьми, у него есть тег RTOS. К счастью, какая-то душа удалила его. – Dan