インラインアセンブリーが邪魔になる理由を打ち明けたと思います。これは完全に移植不可能です(アーキテクチャ間だけでなく、コンパイラーには異なる構文があります)。外部アセンブリファイルを作成し、そのようにする必要があります。アセンブリルーチンにパラメータを渡すことは、それらをC関数に渡すこととまったく同じです。ちょうど前方にあなたの関数の署名をどこかに宣言し、呼び出しコード(Cで)は正しいことをします。次に、外部アセンブリファイルにルーチンを実装し(呼び出し規約に従います)、適切なシンボルをエクスポートして、リンカがすべてを正しく結び付けるようにします。プレスト - 作業組立!
リクエストされた例です。私はこれを何らかの形でコンパイルまたはテストしようとしなかったので、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:
int型3h`がデバッガにジャンプするために使用される `ので
#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);
}
、I翻訳は 'assert(0)'と言います。 – avakar
int 3hは単なる例です。私はまた、異なるintの、主にint 15hです。 – Eldad