码迷,mamicode.com
首页 > 其他好文 > 详细

stdcall和cdecl

时间:2017-12-12 15:08:21      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:back   $0   style   call   32位   add   turn   main   return   

红色部分为不同之处。代码编译  在x86_64的机器上  选择了32位模式 gcc -S 1.c -m32

 默认cdecl

int add(int a,int b,int c){

 int sum = a+b+c;
 return sum;
};

int main(void){
 int c=add(1,2,3);
}

add:

pushl %ebp
 movl %esp, %ebp
 subl $16, %esp
 movl 8(%ebp), %edx
 movl 12(%ebp), %eax
 addl %eax, %edx
 movl 16(%ebp), %eax
 addl %edx, %eax
 movl %eax, -4(%ebp)
 movl -4(%ebp), %eax
 leave
 ret
main:
 pushl %ebp
 movl %esp, %ebp
 subl $16, %esp
 pushl $3
 pushl $2
 pushl $1
 call add
 addl $12, %esp
 movl %eax, -4(%ebp)
 movl $0, %eax
 leave
 ret

 

stdcall:

int __attribute__((__stdcall__)) add(int a,int b,int c){
 int sum = a+b+c;
 return sum;
};

int main(void){
 int c=add(1,2,3);
}

add:
 pushl %ebp
 movl %esp, %ebp
 subl $16, %esp
 movl 8(%ebp), %edx
 movl 12(%ebp), %eax
 addl %eax, %edx
 movl 16(%ebp), %eax
 addl %edx, %eax
 movl %eax, -4(%ebp)
 movl -4(%ebp), %eax
 leave
 ret $12
main:
 pushl %ebp
 movl %esp, %ebp
 subl $16, %esp
 pushl $3
 pushl $2
 pushl $1
 call add
 movl %eax, -4(%ebp)
 movl $0, %eax
 leave
 ret

stdcall和cdecl

标签:back   $0   style   call   32位   add   turn   main   return   

原文地址:http://www.cnblogs.com/yanbiao/p/8027409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!