1、传参无论是用寄存器还是栈,最终都要压入栈中。
2、第一个参数的位置是ebp+8,少于4byte的数据类型按照4Byte压栈,第n个参数的地址是[ebp+4+4n],ebp+4是返回地址。
8byte的数据类型,会先开辟8字节的栈空间esp-8,再把数据放入栈中。下一个参数的地址相应的要加8。
3、局部变量用函数自己的开辟栈帧。局部变量之间间隔2个栈帧。n个局部变量,除了double栈帧开辟的大小为0C0h+n*0Ch,double额外增加4byte。也是为了保持变量间间隔2个栈帧。
若第一个变量是char,那么第一个局部变量的位置是ebp-5,第二个变量ebp-11h,占用一个栈帧,间隔2个栈帧,第三个变量仍然间隔2个栈帧。
若第一个变量是short或int,第一个变量的位置是ebp-8,后面间隔0Ch,double变量本身占2个栈帧,但同下一个变量仍然间隔2个栈帧。
若第一个变量是double,位置是ebp-0C0h。后面间隔也是2个栈帧。