2010-05-20 2 views
3

ASM 파일을 C 프로그램으로 변환하고 싶습니다. 거기에 사용할 수있는 도구가 있습니까? 제 의도는 PIC 16F877A 프로그램의 어셈블리 프로그램을 C 프로그램으로 변환하는 것입니다 ...PIC 16F877A 용 ASM에서 C로 변환 할 수있는 도구가 있습니까

+1

나는이 질문에 대한 태그에 다소 당황 스럽다. 왜 태그 8051? 이 다른 프로세서의 C 코드를 다시 컴파일 하시겠습니까? 왜 RTOS입니까? 프로세서 제품군간에 OS를 이식하려는 시도가 아닌가? –

+0

나는 왜 이것이 RTOS 태그를 가지고 있는지 물어볼 것입니다. 고맙게도 어떤 종류의 영혼이 그것을 제거했습니다. – Dan

답변

1

어셈블리를 C로 자동 변환하는 도구는 일종의 디 컴파일러입니다. x86 어셈블리 언어에 대한 몇 가지 디 컴파일러가 있습니다. 필자는이를 사용하지 않았지만 대화 형 디스어셈블러 인 IDA는 디 컴파일 - C 옵션을 가지고 있으며 마이크로 칩 PIC 어셈블리 언어를 지원한다고 들었습니다.

PIC 어셈블리를 아는 사람들은 PIC 어셈블리에서 C로 코드를 수동으로 이식 할 수 있습니다. 첫 번째 단계는 ".asm"파일의 내용을 ".c"파일로 복사하고 "asm"키워드. 당신은 그 "가 .c"파일을 컴파일하고 동일한 실행 파일로 컴파일 확인하는 "DIFF"를 사용할 수 있어야

// the_program.c 
__asm 
    ; some assembler code 
    goto $0056 
__endasm; 

: SDCC 구문으로, 결과 파일이 같이 보입니다. 사람이 때때로 어셈블러를 동일한 실행 파일로 컴파일하는 C 함수로 변환 할 수 있습니다 (비교할 "diff"사용). 이 기존의 조립 응용 프로그램에 약간의 C 코드를 추가하려면

  • , 그리고 실행 : 두 개의 경로가 여기에서

    // 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; 
    

    같은있다 다음 단계는 종종 보이는 당신이 취할 수 동일 16F877A 프로세서에서 어셈블리 언어의 큰 얼룩을 번역하려고하지 마십시오. 새 코드를 일반적인 C 서브 루틴에 스틱하고 main for() 루프에서 호출하십시오. 시간이 갈수록 버그를 수정하고 기능을 추가하기 위해 한 번에 몇 줄을 asm에서 C로 변환하는 것이 편리 할 수 ​​있으며 언젠가는 완전히 순수한 C로 변환 될 것입니다.하지만 할 이유가 없습니다. 한꺼번에.

  • 이 응용 프로그램을 완전히 다른 프로세서에 이식하려면, 모두 어셈블리 언어를 ".c"파일로 주석 처리하고 간단한 blinky-light 메인 루프 프로그램을 추가하는 것이 가장 좋습니다. 어셈블리 언어를 일반적인 지침으로 사용하여 한 번에 하나 또는 두 개의 C 펑션을 작성하고 추가 할 때마다 새 프로세서에서 프로그램을 테스트 한 다음 적절한 기능을 얻을 때까지 테스트하십시오.
+0

이 질문은 http://stackoverflow.com/questions/1376856/convert-asm-to-c-not-reverse-engineer와 매우 유사합니다. –