私のasmプロジェクトからC関数を呼び出す際の作業。nasm x86-64からc関数を呼び出す
私は整数値をc関数にプッシュしようとしています。
私のコード
mov rdi, [input]
push rdi ;push rdi into stack for c function to work with
call dtoch
pop rdi ;to keep stack balanced
「 私が間違っているレジスタへの入力を移動するのですか?
LinuxのUbuntu OSで実行しても、エラーが表示されず、正しい値が表示されないだけです。
私はC environementで関数を実行すると問題なく動作しますが、自分のnasmプロジェクトでは間違った数値が出力されます。
C機能:
void dtoch(int d)
{
int n , r[10], i = 0, number, j = 0;
while (number > 0)
{
r[i] = number%16;
number = number/16;
i++;
j++;
}
printf ("It's hexadecimal equivalent is: ");
for (i = j -1; i > = 0; i--)
{
if (r[i] == 10)
printf("A");
else if (r[i] == 11)
printf("B");
else if (r[i] == 12)
printf("C");
else if (r[i] == 13)
printf("D");
else if (r[i] == 14)
printf("E");
else if (r[i] == 15)
printf("F");
else
printf("%d", r[i]);
}
}
呼び出される関数は、引数をスタックにプッシュするために使用するレジスタを気にしません。 C関数の呼び出し規約は何ですか?エラーが発生していますか?あなたはより多くの情報を提供する必要があります。 –
どのオペレーティングシステムですか? – zvrba
C関数プロトタイプを表示します。 –