I do a experiments to check how gcc pass the arguments.
here is the code
#include <stdio.h>
int main(int argc , char *argv[]){
int a=3;
int b=3;
int c=3;
printf("%d %d\n",++a+c,a+c);
printf("%d %d\n",++b,b);
return 0;
}
the anwer is
8 7
4 4
the piece of assembly language: gcc 4.6.2
movl $3, 28(%esp)
movl $3, 24(%esp)
movl $3, 20(%esp)
movl 20(%esp), %eax
movl 28(%esp), %edx
leal (%edx,%eax), %ecx
addl $1, 28(%esp)
movl 20(%esp), %eax
movl 28(%esp), %edx
addl %eax, %edx
movl $.LC0, %eax
movl %ecx, 8(%esp)
movl %edx, 4(%esp)
movl %eax, (%esp)
call printf
addl $1, 24(%esp)
movl $.LC0, %eax
movl 24(%esp), %edx
movl %edx, 8(%esp)
movl 24(%esp), %edx
movl %edx, 4(%esp)
movl %eax, (%esp)
call printf
In the first case , gcc first compute the a+c to %ecx ,and pass it
stack , the compute ++a+c to %edx ,so the answer is 8 7
In the second case , why it didn't do the same thing like
compute b=3 and pass it to stack ,then compute ++b and pass it to
stack .to the result 4 3. However it first
addl $1, 24(%esp) ==> b+1 I think it compute the expression
b+1. the pass it to stack . the b which now is 4 and was passed to
stack.
I was wondering why gcc handle the same mode in two ways.
Is there some errors I had made ?
In my opinion ,for the reason of the concept of consistent ,it may be
8 8
4 4
thank you advance