1)C结构如何传递给汇编函数。我的意思是按值传递,而不是按引用传递。2)顺便说一下,被调用方如何将结构返回给其调用方?由于我的母语不是英语,所以我为自己的表现不好而感到抱歉。
我编写了一个简单的程序来验证C结构如何传递给函数。但是结果令人惊讶。寄存器传递了一些值,但将它们压入堆栈则传递了一些值。这是代码。
源代码
#include <stdio.h>
typedef struct {
int age;
enum {Man, Woman} gen;
double height;
int class;
char *name;
} student;
void print_student_info(student s) {
printf("age: %d, gen: %s, height: %f, name: %s\n",
s.age,
s.gen == Man? "Man":"Woman",
s.height, s.name);
}
int main() {
student s;
s.age = 10;
s.gen = Man;
s.height = 1.30;
s.class = 3;
s.name = "Tom";
print_student_info(s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
汇编
6fa: 55 push %rbp
6fb: 48 89 e5 mov %rsp,%rbp
6fe: 48 83 …Run Code Online (Sandbox Code Playgroud)