C вызывает ASM (YASM x86) - PullRequest
       85

C вызывает ASM (YASM x86)

0 голосов
/ 29 сентября 2018

Я хочу вызвать функцию ASM в коде переменного тока. Как передать параметры в код ASM?

#include <stdio.h>

extern int * asm_mod_array(int *ptr,int size);
 int main()
 {
int fren[5]={1,2,3,4,5};

/*Call ASM func*/
int a=asm_mod_array(fren,5);
printf(u,a);
return 0;   
 }

Теперь я хочу использовать эти параметры в моей функции ASM.

;asm_mod_array(int ptr,int size)


global asm_mod_array

asm_mod_array:
push r12
mov rdi, 0
mov rsi, 0

mov r12,0
mov rax,0

sumLoop:

add rax, [rdi+r12]
inc r12
cmp r12, rsi
jl sumLoop

mov [rdx], rax
pop r12
ret

ПРИМЕЧАНИЕ: в коде ASM значение 0 необходимо изменить с помощью параметров, переданных c.

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете получить доступ к аргументам в соответствии с соглашениями о вызовах AA64 для вашей платформы.На большинстве систем, кроме Windows, это определяется ABI AMD64 System V.

Согласно этим соглашениям о вызовах, ptr будет в rdi, а size будет в rsi.Возвращаемое значение помещается в rax.

См. Соглашения о вызовах X86 .

...