1

一部のコードを C からアセンブリに移植しようとしていますが、ここで問題が発生しています。C関数では、構造体が渡されます。この構造体内には、次のような 2 つの関数が保存されています。

typedef struct sort sort_t;
struct sort {
    void *data;
    cmpfunc_t cmpfunc;
    cpyfunc_t cpyfunc;
};

C コードでは、これらの関数は次のように呼び出されます (m は構造体へのポインターです)。

m->cpyfunc(m->data, j, k);

今、私はアセンブリでこれをやろうとしています。構造体がメモリに順次保存されることに気付きました。したがって、m が %ebx に格納されている場合、cmpfunc は 4(%ebx) にあります。しかし、アセンブリからこの関数を呼び出す方法がわかりません。次のようにして、4(%ebx) から直接両方を実行してみました。

call    *4(%ebx)

それはうまくいかないので、私は試しました:

movl    4(%ebx),%edx
call    *%edx

しかし、役に立たない。これを行う方法が見つからないようで、試した検索でも何も見つかりませんでした。アセンブリでこれを行うにはどうすればよいですか?

4

2 に答える 2