GNU GCC :
用到的关键字
“__asm__” 表示后面的代码为内嵌汇编,“asm”是“__asm__”的别名。
“__volatile__” 表示编译器不要优化代码,后面的指令保留原样,“volatile”是它的别名。
括号里面是汇编指令。
内嵌汇编语法如下:
__asm__(
汇编语句模板:
输出部分:
输入部分:
破坏描述部分)
一个简单的汇编模板:
代码:
int a=10,b;
asm("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /*输出部*/
:"r"(a) /*输入部*/
:"%eax" /*毁坏部*/
);
表示C语言里的“b=a;”
里边r表示使用任意寄存器,%0、%1表示使用两个寄存器,一般只能%0~%9共十个操作数,按输入输出部变量出现顺序进行映射。
寄存器用两个百分号,是因为使用了%0%1这些数字使百分号有了特殊意义,所以在操作数出现的寄存器必须用双百分表示。
毁坏部里边的%eax表示eax寄存器在汇编代码块执行过程中会被改写,在执行前要保护好,这是提交给编译器决定的。
A_S_M
GCC内嵌汇编详解
本文介绍了GNU GCC中内嵌汇编的关键字及其用法,包括__asm__和__volatile__的作用,以及如何在C语言中正确书写内嵌汇编代码。通过示例说明了寄存器映射、输入输出部分及毁坏描述部分的具体含义。

被折叠的 条评论
为什么被折叠?



