從我的asm項目調用C函數。從nasm調用c函數x86-64
我試圖將整數值推入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操作系統上,沒有收到錯誤,只是沒有打印出正確的值。
當我在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函數的調用約定是什麼?你有錯誤嗎?你需要提供更多信息。 – 2012-01-14 17:22:50
哪個操作系統? – zvrba 2012-01-14 17:29:10
顯示C函數原型。 – 2012-01-14 17:37:00