내 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
은 ' 나는 잘못된 레지스터에 입력을 이동 무엇입니까?
리눅스 우분투 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 func의 호출 규칙은 무엇입니까? 오류가 있습니까? 더 많은 정보를 제공해야합니다. –
어떤 운영 체제입니까? – zvrba
C 함수 원형을 보여줍니다. –