C向C与汇编区别传参的问题

(1)C和C与汇编区别参数传递
规定參数在4个以内依次对应r0-r3寄存器
参数在4个以外,用栈传递

(2)返回值传递 规定使用r0

(3)使用栈类型 规定使用满减栈

a、文件和文件之间跳转 C與汇编区别文件:


满足C与汇编区别代码外部调用声明:.global
满足C语言调用其他外部C函数声明:函数声明

b、在C语言中专门内嵌一个特殊函数:asm GNU编譯环境下:

说明: 1)如果害怕编译器优化内嵌C与汇编区别代码在__asm__后加__volatitle__防止编译器优化


2)C与汇编区别代码必须放在一个"“中间,并且”"中間不能有enter回车换行只能用\n换行,\t为指令格式对齐编译器不会检查内嵌C与汇编区别语法,而是直接交给C与汇编区别器完成
3)输出寄存器列表:ASMC与汇编区别—>C语言
4)输入寄存器列表:C语言—>ASMC与汇编区别
5)告诉编译器你修改过的寄存器编译器会自动把保存这些寄存器值的指囹加在内嵌C与汇编区别之前,再把恢复寄存器值的指令加在内嵌C与汇编区别之后

Guide的2.1节这篇文档要讲的是 C与汇编區别代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。
   不同于x86的参数传递规则ATPCS建议函数的形参不超过4个,如果形参个數少于或等于4则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部分必须通过堆栈进行传递

lr入栈,调用完test_c_args之后再把刚才保存在棧中的lr写回pc,这样才能返回到main函数中

这部分的代码和实例1的代码大部分是相同的,不同的地方是test_c_args的参数个数和test_asm_args的参数传递方式

我要回帖

更多关于 C汇编 的文章

 

随机推荐