簡體   English   中英

C呼叫ASM(YASM x86)

[英]C calling ASM (YASM x86)

我想用交流代碼調用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代碼中,必須使用c傳遞的參數來更改0。

您可以根據平台的AA64調用約定來訪問參數。 在除Windows以外的大多數系統上,這是由System V AMD64 ABI定義的。

根據這些調用約定, ptr將以rdisize將以rsi 返回值放在rax

請參閱X86調用約定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM