Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160810
  • 博文数量: 42
  • 博客积分: 996
  • 博客等级: 准尉
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-09 19:41
文章分类
文章存档

2012年(42)

我的朋友

分类: C/C++

2012-04-26 13:23:37

通常C代码中的内联汇编需要和C的变量建立关联,需要用到完整的内联汇编格式:

_asm_(assembler template
      :output operands                 /*optional*/
      :input operands                  /*optional*/
      :list of clobbered registers     /*optional*/ 
       );
由四部分组成:
1. 汇编指令
2. 第二部分指示汇编指令的运算结果要输出到哪些C操作数中,C操作数应该是左值表达式
3. 第三部分指示汇编指令需要从哪些C操作数中获得输入
4. 在汇编指令中被修改过的寄存器列表

example:

/*将a的值赋给b*/
# include
int main()
{
    int a = 10, b;
    _asm_("movl %1, %%eax\n\t"
          "movl %%eax, %0\n\t"
          :"=r"(b)              /*output*/
          :"r"(a)               /*input*/
          :"%eax"               /*clobbered register*/
          );
     printf("Result: %d, %d\n", a, b);
     return 0;
}
阅读(1546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~