2020-02-06 asm内联汇编

本文详细介绍了64位AT&T汇编中的寄存器使用,包括16个常用64位寄存器的用途,如%rax作为函数返回值,%rsp指向栈顶,以及%rdi、%rsi等用于存放函数参数。同时,文章讲解了内联汇编中操作数的引用方式和约束,以及32位通用寄存器的功能,如EAX、EBX、ECX、EDX在不同场景下的作用。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/darennet/article/details/41128881
通常嵌入到 C 代码中的汇编语句很难做到与其它部分没有任何关系,因此更多时候需要用到完整的内联汇编格式:

__asm__("asm statements" : outputs : inputs : registers-modified);

下面是一个内联汇编的简单例子:

例4.内联汇编

/* inline.c */
int main()
{
    int x = 10, y = 0;
    printf("init:x=%d, y=%d\n", x, y);

    __asm__ __volatile__("movl %1, %%eax;\n\r"
                         "movl %%eax, %0;"
                         :"=r"(y)      /* 输出参数列表 */    
                         :"r"(x)       /* 输入 */
                         :"%eax");     /* 不受影响的寄存器 */
    
    printf("now: x=%d, y=%d\n", x, y);
}

/*
上面的程序完成将变量x的值赋予变量y
*/

有几点需要说明:

  • 变量y是输出操作数&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值