美文网首页
__asm__ __volatile__ GCC的内嵌汇编语法

__asm__ __volatile__ GCC的内嵌汇编语法

作者: 星夜兼程工作笔记 | 来源:发表于2019-10-10 20:48 被阅读0次

80386有如下寄存器:

8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;

8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp;

8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和低8位;

6个段寄存器:%cs(code),%ds(data),%ss(stack), %es,%fs,%gs;

3个控制寄存器:%cr0,%cr2,%cr3;

6个debug寄存器:%db0,%db1,%db2,%db3,%db6,%db7;

2个测试寄存器:%tr6,%tr7;

8个浮点寄存器栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。

操作数排列是从源(左)到目的(右),如“movl %eax(源), %ebx(目的)”

带有C/C++表达式的内联汇编格式为:

__asm__ __volatile__("Instruction List" : Output : Input : Clobber/Modify);

从中我们可以看出它和基本内联汇编的不同之处在于:它多了3个部分(Input,Output,Clobber/Modify)。在括号中的4个部分通过冒号(:)分开。

这4个部分都不是必须的,任何一个部分都可以为空。应用举例:

template<class T>

static inline  T _atomic_xchg(volatile T *ptr, T value)            \

{                                                                                    \

    T result;                                                                        \

    __asm__ __volatile__("lock\nxchg" " %0,%1"                                    \

                          : "=r"(result), "=m"(*(volatile T*)ptr)                \

                          : "0"(value), "m"(*(volatile T*)ptr)                \

                          : "memory");                                              \

    return result;                                                                  \

}

解析:

__asm __ : ---expressing asm language

__volatile__:----telling complier not to optimize my asm coding

lock-------asm instruction, expressing  synchronous operation

xchg-------asm insturction, expressing to exchange the values in *ptr and val varible

%0---------expressing  *ptr variable

%1---------expressing  val variable

"0"(val)--------expressing to input val variable into eax register in system

"m"(*ptr)------expressing that the data pointed by the pointer of ptr varable are stored in memory

"=r"(result), "=m"(*ptr)----expressing that the data exchanged will be store result and *ptr variable ,

"m" expresses  to use memory to store the data of *ptr variable

"r" expresssed to use common register to store the data of val variable

相关文章

  • __asm__ __volatile__ GCC的内嵌汇编语法

    80386有如下寄存器: 8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%e...

  • C代码中嵌入汇编代码

    内嵌汇编语法 同时 “asm” 也可以由 “__asm__” 来代替,“asm” 是 “__asm__” 的别名。...

  • 内联汇编

    AT&T汇编语法 GCC只支持AT&T汇编语法内嵌在C语言中。 Intel和AT&T汇编风格对比: AT&T寻址 ...

  • 18本Linux系统和驱动开发相关电子书资源

    1 《GCC内嵌汇编及AT&T汇编语法》 2 《ARM嵌入式系统基础教程》 3 《无界面linux文件系统的制作》...

  • gcc内嵌汇编详解

    [作者:byeyear 首发:cnblogs Email:east3@163.com 转载请注明...

  • 汇编指令-收藏方便查阅

    一: 汇编指令格式 ARM 汇编器的基本语法,这与 GCC汇编器 的语法有所不同,整体编译的流程如下所示; 二: ...

  • 汇编指令-收藏方便查阅

    一: 汇编指令格式 ARM 汇编器的基本语法,这与 GCC汇编器 的语法有所不同,整体编译的流程如下所示; 二: ...

  • DPDK gcc内联汇编

    在DPDK中,使用gcc的内联汇编实现高效率的函数,比如自旋锁,cas操作等。今天简单介绍一下gcc内联汇编语法和...

  • GCC内嵌汇编语言[转]

    GCC内嵌汇编语言 作者:肖文鹏 临江仙 整理:杨小华 绝大多数 Linux 程序员以前只接触过DOS/Windo...

  • GCC内嵌汇编语言[转]

    GCC内嵌汇编语言 作者:肖文鹏 临江仙 整理:杨小华 绝大多数 Linux 程序员以前只接触过DOS/Windo...

网友评论

      本文标题:__asm__ __volatile__ GCC的内嵌汇编语法

      本文链接:https://www.haomeiwen.com/subject/qhtzpctx.html