gccでは、次の構文を使用して、ローカル変数をレジスターに入れる必要があることを宣言できます。
register int arg asm("eax");
インターネットで見つけた古いコードでは、この構文を使用して、関数のパラメーターをレジスターで渡す必要があることを宣言していました。
void foo(register int arg asm("eax"))
しかし、私がこの例を試してみると:
/*
Program to demonstrate usage of asm keyword to allocate register for a variable.
*/
#include <stdio.h>
/* Function with argument passed in register */
void foo(register int arg asm("eax") )
{
register int loc asm("ebx");
loc = arg;
printf("foo() local var: %d\n", loc);
}
int main(void)
{
foo(42);
return 0;
}
そしてgccでコンパイルするとエラーが発生します:
gcc main.c -o test-asm.exe
main.c:7:27: error: expected ';', ',' or ')' before 'asm'
今私の質問は次
のとおりです。上記のasm構文は、gccで、つまり関数の正式なパラメーターに対して正しいですか?
これはgccによってサポートされたことがありますか?
これが正しい構文でない場合、これをどのように達成できますか?
ありがとう、
// jk