インラインアセンブリがお尻の痛みである理由を突き止めたと思います-それは完全に移植できません(アーキテクチャ間だけでなく、コンパイラはしばしば異なる互換性のない構文を持っています)。外部アセンブリ ファイルを作成し、その方法で必要なことを行います。パラメーターをアセンブリ ルーチンに渡すことは、パラメーターを C 関数に渡すこととまったく同じです。関数の署名をどこかで前方宣言するだけで、呼び出し元のコード (C) は正しいことを行います。次に、ルーチンを外部アセンブリ ファイルに実装し (呼び出し規約に従っていることを確認してください)、適切なシンボルをエクスポートして、リンカがすべてを正しく結合するようにします。Presto - 作業アセンブリ!
リクエストに応じて、例。これをコンパイルしたりテストしたりしたわけではないので、100% ではない可能性があります。幸運を。
myHeader.h:
void *someOperation(void *parameter1, int parameter2);
myAssemblyFile.s:
.text
.globl someOperation
someOperation:
add %rdx, %rcx
mov %rcx, %rax
ret
.end
mySourceCode.c:
#include "myHeader.h"
void someFunction(void)
{
void *arg1 = (void *)0x80001000;
int arg2 = 12;
void *returnValue;
printf("Calling with %x %x\n", arg1, arg2);
// call assembly function
returnValue = someOperation(arg1, arg2);
printf("Returned: %x\n", returnValue);
}