Assembly 如何运行手臂装配?

Assembly 如何运行手臂装配?,assembly,arm,Assembly,Arm,我从参考手册中学习了ARM&Neon指令集。现在我想在ARM处理器中使用它 void addArr(int *a,int *b){ int i=0; for(i=0;i<4;i++){ a[i]=a[i]+b[i]; } } int main(){ int a[4]={0,1,2,3}; int b[4]={0,1,2,3}; addArr(a,b); return 0; } 现在,它们之间如何互连?手臂装配一定有一些语法,我不知道。请分享一些好的读物。 注意:请不要

我从参考手册中学习了ARM&Neon指令集。现在我想在ARM处理器中使用它

void addArr(int *a,int *b){ int i=0;
 for(i=0;i<4;i++){
  a[i]=a[i]+b[i];
  } 
}
int main(){
 int a[4]={0,1,2,3};
 int b[4]={0,1,2,3};
 addArr(a,b);
 return 0;
}
现在,它们之间如何互连?手臂装配一定有一些语法,我不知道。请分享一些好的读物。 注意:请不要检查逻辑&不要建议内在方法

您需要遵循

然后需要链接一些标识符,让C知道在哪里可以找到
addArr()
。 在汇编程序中,您需要导出addArr,在C语言中,您需要一个声明,如
\uu asm void addArr()

这取决于你的工具链

@by default r0- address of a, r1- address of b

 VLD1.I32 D0,D1,[R0]!        @loading 128 bit of input , i.e 4 element(32*4=128) of a
 VLD1.I32 D2,D3,[R1]!        @loading 128 bit of input , i.e 4 element(32*4=128) of b
 VADD.I32 Q0, Q1, Q2         @q0(0:31)=1st element of a + 1st element of b ... till 4 element