ASM 파일을 C 프로그램으로 변환하고 싶습니다. 거기에 사용할 수있는 도구가 있습니까? 제 의도는 PIC 16F877A 프로그램의 어셈블리 프로그램을 C 프로그램으로 변환하는 것입니다 ...PIC 16F877A 용 ASM에서 C로 변환 할 수있는 도구가 있습니까
답변
어셈블리를 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 펑션을 작성하고 추가 할 때마다 새 프로세서에서 프로그램을 테스트 한 다음 적절한 기능을 얻을 때까지 테스트하십시오.
이 질문은 http://stackoverflow.com/questions/1376856/convert-asm-to-c-not-reverse-engineer와 매우 유사합니다. –
나는이 질문에 대한 태그에 다소 당황 스럽다. 왜 태그 8051? 이 다른 프로세서의 C 코드를 다시 컴파일 하시겠습니까? 왜 RTOS입니까? 프로세서 제품군간에 OS를 이식하려는 시도가 아닌가? –
나는 왜 이것이 RTOS 태그를 가지고 있는지 물어볼 것입니다. 고맙게도 어떤 종류의 영혼이 그것을 제거했습니다. – Dan