は、私はいくつかのCコードを書くと仮定し、それはこのようになりますいくつかのアセンブリを生成:私は右のメインの間では、より多くのアセンブリコードを挿入するにはどうすればよいアセンブリコードをプログラムに接頭辞としてGCCを使用するにはどうすればよいですか?
.text main: mvs $r3, $sp addi $r3, $r3, -16 mvs $sp, $r3 mvs $r3, $sp addi $r3, $r3, 3 shri $r3, $r3, 2 shai $r3, $r3, 2 call __main sti 8($r3), 25 sti 4($r3), 23 sti ($r3), 43 L2: ld $r4, 8($r3) ld $r5, 4($r3) add $r4, $r4, $r5 st 8($r3), $r4 ld $r4, 8($r3) ld $r5, 4($r3) sub $r4, $r4, $r5 st ($r3), $r4 jmp L2
:最初の行を? 目的は、Cコードからガスで生成されたアセンブリコードを実行する前に、すべてのレジスタを0に設定することです。これは、私が作業している特定のプロセッサで必要とされるレジスタの値をデフォルトにするために行われます。
gccリンカとカスタムオブジェクトファイルを使って私のカスタムコードでプロジェクトをアセンブルしようと考えましたが、リンカでそのような機能があるかどうかはわかりません。
私はcrtbegin.asmの使用を検討しましたが、これは実際にはC++コンストラクタ/デコンストラクタをサポートするためのものだと思います。それは私を助けません。
アイデア?
これをインラインアセンブリコードとしてCコードファイル内に挿入するだけで動作しますか?あるいは、これは 'main'関数が始まる前に起こらなければなりませんか? –
理想的には、main関数内で、生成されるコードの前に発生するのが理想です。私はTARGET_ASM_FILE_STARTを使ってコードを注入できることを知ったが、悪い/間違っていると思う.textの前にも起こる。 – RGroppa