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

    作者:严彦彪 原创作品转载请注明出处
  • 相关阅读:
    2.1.7出现异常,锁自动释放
    2.1.5脏读
    2.1.4synchronized方法与锁对象
    2.1.3多个对象多个锁
    2.1.2实例变量非线程安全
    2.1.1方法内的变量为线程安全
    Linux内核开发
    fl2440 platform总线led字符设备驱动
    fl2440字符设备led驱动
    cdev结构体及其相关函数
  • 原文地址:https://www.cnblogs.com/yanbiao/p/8027409.html
Copyright © 2011-2022 走看看