2010-05-20 8 views
3

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

+1

Я несколько озадачен тегами по этому вопросу. Зачем пометить его 8051? Собираетесь ли вы перекомпилировать код C для этого другого процессора? Почему RTOS? Наверняка не какая-то попытка портировать ОС между семействами процессоров? –

+0

Я тоже собирался спросить, почему, черт возьми, у него есть тег RTOS. К счастью, какая-то душа удалила его. – Dan

ответ

1

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

Этот вопрос очень похож на http://stackoverflow.com/questions/1376856/convert-asm-to-c-not-reverse-engineer –

 Смежные вопросы

  • Нет связанных вопросов^_^