汇编程序调用c函数为什么需要设置栈 因为高级语言的函数在运行过程中需要有一个函数栈,系统会在调用函数前将函数的参数入栈,而在函数调用结束后再将函数参数出栈,所以汇编程序调用C函数需要设置栈。
关于汇编调用C语言子程序的大大疑问。有图的 并没有统一规定,这取决于编译器规则,以及所用的CPU内核类型,C语言用于很多编程环境的CPU,不同的CPU方式不同,你的貌似是ARM,ARM的规定就是前4个寄存器存参数,超过4个就要入栈,具体位置取决于SP入栈时的位置,第5个也就是e,就在栈顶位置,第6个就是栈顶+4(ARM的SP增长方向貌似是-,所以应该+4),以此类推。其实你的参数表就是一长串数据,超过4*4字节的部分数据就入栈。这个规则只适合于ARM芯片,用是keil gcc等编译器都符合这个规则,对于其他芯片因为内核构造就不同,比如我们电脑用的i86,根本不存在r0-rn这样的寄存器,自然不是这样,所以原则不同。
汇编调用c函数那个问题你说的方法好像不行 编译没有出错,是链接的时候出错,在链接的时候gcc不能找到hello的定义,汇编out.s的时候要把a.c加在一起,例如gcc out.s a.c。