linux 汇编 rbp rsp是什么意思
(1)参数个数少于7个:f(a,b,c,d,e,f);a->%rdi,b->%rsi,c->%rdx,d->%rcx,e->%r8,f->%r9g(a,b)a->%rdi,b->%rsi有趣的是,实际上将参数放入寄存器的语句是从右到左处理参数表的,这点与32位的时候一致.CODE2)参数个数大于7个的时候H(a,b,c,d,e,f,g);a->%rdi,b->%rsi,c->%rdx,d->%rcx,e->%raxg->8(%esp)f->(%esp)callH易失寄存器:%rax,%rcx,%rdx,%rsi,%rdi,%r8,%r9为易失寄存器,被调用者不必恢复它们的值。显然,这里出现的寄存器大多用于参数传递了,值被改掉也无妨。而%rax,%rdx常用于数值计算,%rcx常用于循环计数,它们的值是经常改变的。其它的寄存器为非易失的,也就是rbp,rbx,rsp,r10~r15的值如果在汇编模块中被改变了,在退出该模块时,必须将其恢复。教训:用汇编写模块,然后与c整合,一定要搞清楚编译器的行为,特别是参数传递的方式.此外,我现在比较担心的一点是,将来如果要把程序移植到WIN/VC环境怎么办?以前我用cygwin的gcc来处理汇编模块,用vc来处理c模块,只需要很少改动.现在的问题是,如果VC用不同的参数传递方式,那我不就麻烦了?