1

アセンブリと C コードを一緒にコンパイルしようとしていますが (C からアセンブリへではなく)、それを実行できません。

例えば

ファイル common.h

#ifndef __COMMON_H__
#define __COMMON_H__

struct tree{
        tree* left;
        tree* right;

        void* elem;
};

void foo(int c);
#endif

ファイル common.S

#include "common.h"

    .text
    .globl foo
    .ent foo
foo:
     //foo implementation

    .end foo

これをコンパイルしようとすると:

# gcc -c common.S
common.h: Assembler messages:
common.h:5: Error: unrecognized opcode `struct tree{'
common.h:7: Error: unrecognized opcode `tree* left'
common.h:8: Error: unrecognized opcode `tree* right'
common.h:10: Error: unrecognized opcode `void* elem'
common.h:12: Error: junk at end of line, first unrecognized character is `}'
common.h:14: Error: unrecognized opcode `void foo(int c)'

gcc を使用して C 定義をアセンブリに取り込む方法はありますか?

前もって感謝します。

4

3 に答える 3

2

いいえ、アセンブリ言語に C 宣言を含めることはできません。アセンブラにはstruct tree意味がわかりません。

fooの定義を使用するアセンブリ言語関数をstruct tree作成する場合は、C ヘッダー ファイルを使用せずに作成する必要があります。

これがどのように見えるかを理解するには、foo関数を C で記述し、コンパイルしてgcc -Sアセンブリ リストを生成し、コンパイラによって生成された結果のcommon.sファイルを調べます。(既存のファイルを破壊しないように、おそらく別のディレクトリでこれを行う必要がありcommon.sます。)

struct treeおそらく、メンバー名leftright、およびへの参照は見られないでしょうelem。代わりに、特定のオフセットでデータを参照するアセンブリ オペコードが表示されます。

于 2011-11-24T04:18:01.907 に答える
1

ヘッダー ファイルをコンパイルする必要はありません。これを試して:

# gcc -c common.S

それなし

#include <common.h> 

共通して.S

于 2011-11-24T02:14:48.413 に答える
0

Inline Assembler Cookbookを確認することをお勧めします。

于 2011-11-25T04:08:58.880 に答える