首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C调用ASM (YASM x86)

C调用ASM (YASM x86)
EN

Stack Overflow用户
提问于 2018-09-29 00:51:27
回答 1查看 321关注 0票数 0

我想在c代码中调用ASM函数,如何将参数传递给ASM代码?

代码语言:javascript
复制
#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函数中使用这个参数。

代码语言:javascript
复制
;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传递的参数进行更改。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-29 01:02:53

您可以根据平台的AA64调用约定访问参数。在大多数系统上,除了Windows之外,这是由System AMD64 ABI定义的。

根据这些调用约定,ptr将在rdi中,size将在rsi中。返回值放置在rax中。

X86调用约定

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52564149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档