A_S_M

来源:互联网 发布:mac终端进入指定目录 编辑:程序博客网 时间:2024/05/21 23:00

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寄存器在汇编代码块执行过程中会被改写,在执行前要保护好,这是提交给编译器决定的。

原创粉丝点击