我正在尝试将一些代码从 C 移植到程序集,但我在这里遇到了一些麻烦。在 c 函数中,我得到了一个结构。在这个结构中,保存了两个这样的函数:
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
但无济于事。我似乎找不到任何方法来做到这一点,而且我尝试过的任何搜索都一无所获。我将如何在大会中做到这一点?