zoukankan      html  css  js  c++  java
  • stdcall和cdecl

    红色部分为不同之处。代码编译  在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

    作者:严彦彪 原创作品转载请注明出处
  • 相关阅读:
    Java 字符串判空
    JavaScript try catch 常用场景(一)
    IE console 未定义
    共享锁与排它锁
    js 原型链
    js的原型模式
    js中RegExp类型
    js中Array对象方法详解
    js动态生成input指定My97DatePicker时间问题
    利用spring、cxf编写并发布webservice
  • 原文地址:https://www.cnblogs.com/yanbiao/p/8027409.html
Copyright © 2011-2022 走看看