Damn it, I know what the point, it turns out after invoke, before the
%ebp is still the frame pointer of last function, but after that, ebp becomes the current frame pointer, while the arguments is exactly on the 4n+4(%ebp).
So in general, %ebp is like a guard for memory, which cares about all local variable's address. program uses %ebp to infer arg and local var.
And %ebp is stable in a function.
All the arguments have to be in stack before invoke a function.
I'm far too 'new' to assembly, what a shame