Linux下汇编语法和内嵌汇编

相关参考可见上一篇文章:http://blog.csdn.net/yd4751/article/details/46119787


做了一个小例子

例子程序:

使用了内嵌汇编

int main()
{
        int a = 0;
         __asm__ __volatile__("mov %%ebp, %0 \r\n"
              :"=m"(a)
              ::"memory");
        return 0;
}
汇编代码:使用gcc -S 获得

        .file   "test.c"
        .text
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $16, %esp
       <span style="color:#ff0000;"> movl    $0, -8(%ebp)</span>
#APP
        <span style="color:#ff0000;">mov %ebp, -8(%ebp)</span>

#NO_APP
        movl    $0, %eax
        addl    $16, %esp
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-52)"
        .section        .note.GNU-stack,"",@progbits
可以发现,例子中的两句分别对应文中红色部分

这之前后之后的操作分别是压栈和出栈的操作

最后main函数栈的存储如下,如有错误请大家多多指教~






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值