在汇编和C代码之间的互相调用的时候,现阶段会有使用对方的函数和变量两种类型的引用,下面对其进行试验并总结。
- 汇编调用C的函数,首先c语言的函数必须是全局的也就是不能声明为static的。然后在汇编中使用extern关键字将其在代码中声明,最后调用过程中,汇编代码负责将参数压栈,call c_func,汇编代码负责清理堆栈。
- C调用汇编的函数,汇编的函数名其实就是一个label,C调用它的时候其实就是asm_func(param1, param2);主要的压栈,出栈操作在C代码中做的,但其实是编译器进行编译的时候做的这个工作。
- 汇编使用C的变量,
- c中的变量是指针。比如 char* hello="Hello world!\n";,当在汇编中使用hello的时候,因为汇编中的hello是一个地址,C中的hello是一个指向字符串的指针,是一个变量里面存储的是字符串的首地址,在汇编中[hello]才是指向字符串的地址。
- c中的变量是数组。比如char hello[]="Hello world!\n";,当在汇编中使用hello的时候, 因为汇编中的hello是一个地址,C中的hello也是一个地址不是变量,所以在汇编中引用hello的时候,直接使用hello就是指向字符串的地址。
- C使用汇编的变量,