2010-05-20 20 views
3

Je veux convertir le fichier ASM en programme C. existe-t-il des outils disponibles pour cela? Mon intention est de convertir le programme d'assemblage du programme PIC 16F877A en programme C ...Y at-il un outil disponible pour convertir ASM en C pour PIC 16F877A

+1

Je suis un peu déconcerté par les étiquettes sur cette question. Pourquoi le marquer 8051? Allez-vous recompiler le code C pour cet autre processeur? Pourquoi RTOS? Sûrement pas une tentative de port d'un OS entre les familles de processeurs? –

+0

J'allais aussi demander pourquoi diable cela avait un tag RTOS. Heureusement, une bonne âme l'a enlevé. – Dan

Répondre

1

Un outil qui convertit automatiquement l'assemblage en C est une sorte de décompilateur. Il existe plusieurs décompilateurs pour le langage d'assemblage x86. Bien que je ne l'utilise pas, j'entends que IDA, le désassembleur interactif, a une option de décompilation en C, et supporte le langage d'assemblage PIC Microchip. Les personnes qui connaissent l'assembly PIC peuvent faire du bon travail en transférant manuellement le code de l'assembly PIC vers C. La première étape consiste à copier le contenu du fichier ".asm" dans un fichier ".c" et à l'encapsuler avec le mot-clé "asm". Avec la syntaxe SDCC, le fichier résultant ressemble à quelque chose comme:

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

Vous devriez être en mesure de compiler ce fichier « .c » et utiliser « diff » pour confirmer qu'il compile à un exécutable identique. Une personne peut parfois traduire des morceaux d'assembleur en fonctions C qui se compilent en un exécutable identique (en utilisant "diff" pour comparer). L'étape suivante semble souvent quelque chose comme

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

A partir de là, il y a deux chemins que vous pouvez prendre:

  • Si vous voulez ajouter un peu de code C à cette application de montage pré-existante, et exécuter le même processeur 16F877A, ne vous embêtez pas à essayer de traduire les gros blobs du langage d'assemblage - collez votre nouveau code dans des sous-programmes C normaux et appelez-le à partir de la boucle for principale(). Au fil du temps, afin de corriger les bugs et d'ajouter des fonctionnalités, il peut être pratique de traduire quelques lignes à la fois d'asm à C, et peut-être un jour il sera entièrement converti en C. Mais il n'y a pas de raison tout à la fois.
  • Si vous souhaitez porter cette application à un processeur complètement différent, il est probablement préférable de commenter tous le langage d'assemblage dans le fichier ".c", et d'ajouter un simple programme de boucle principale blinky-light. Utilisez le langage d'assemblage comme guide général pour écrire une ou deux fonctions C à la fois, en exécutant et en testant le programme sur le nouveau processeur après chaque ajout, jusqu'à ce que vous disposiez des fonctionnalités adéquates.
+0

Cette question est très similaire à http://stackoverflow.com/questions/1376856/convert-asm-to-c-not-reverse-engineer –