3

ASM ファイルを C プログラムに変換したい。これに利用できるツールはありますか。私の意図は、PIC 16F877AプログラムのアセンブリプログラムをCプログラムに変換することです...

4

1 に答える 1

1

アセンブリを C に自動的に変換するツールは一種の逆コンパイラです。x86 アセンブリ言語用の逆コンパイラがいくつかあります。私は使っていませんが、Interactive Disassemblyr である IDA には C への逆コンパイル オプションがあり、Microchip PIC アセンブリ言語をサポートしていると聞きました。

PIC アセンブリを知っている人は、コードを PIC アセンブリから C に手動で移植するのにかなりの仕事をすることができます。最初のステップは、「.asm」ファイルの内容を「.c」ファイルにコピーし、「asm」キーワードでラップすることです。 . SDCC構文では、結果のファイルは次のようになります。

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

その「.c」ファイルをコンパイルし、「diff」を使用して、それが同一の実行可能ファイルにコンパイルされることを確認できるはずです。アセンブラの断片を、同じ実行可能ファイルにコンパイルされる 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;

ここからは、次の 2 つの方法があります。

  • この既存のアセンブリ アプリケーションに C コードを追加し、同じ16F877A プロセッサで実行したい場合は、わざわざアセンブリ言語の大きな塊を変換しようとする必要はありません。新しいコードを通常の C サブルーチンに貼り付けて呼び出します。メインの for() ループから。時が経つにつれて、バグを修正して機能を追加するために、一度に数行を asm から C に翻訳するのが便利だと思うかもしれません。おそらくいつか完全に純粋な C に変換されるでしょう。しかし、そうする理由はありません。それを一度に。
  • このアプリケーションをまったく別のプロセッサに移植する場合は、".c" ファイル内のすべてのアセンブリ言語をコメント アウトし、単純な点滅ライトのメイン ループ プログラムを追加するのがおそらく最善の方法です。アセンブリ言語を一般的なガイダンスとして使用して、一度に 1 つまたは 2 つの C 関数を記述し、追加するたびに新しいプロセッサでプログラムを実行してテストし、十分な機能が得られるようにします。
于 2010-05-22T19:53:28.703 に答える