Gcc 在c语言中,两个字符串之间的冒号是什么?

Gcc 在c语言中,两个字符串之间的冒号是什么?,gcc,assembly,inline-assembly,Gcc,Assembly,Inline Assembly,我正在尝试编辑IDT(中断描述符表),我已经找到了可以访问该结构的文件。但是我不明白asm行中的冒号是什么。我猜这是一个用C语言制作位图的游戏,这是在某种程度上填充指令。但我找不到任何确定的东西 如果有帮助,编译器现在会说:无效的“asm”:作为操作数的表达式无效。还在和这个战斗…:) 那么,冒号在那里做什么呢?这是来自gcc编译器的扩展asm语法。下面是一个描述语法的示例: asm ( assembler template : output operands

我正在尝试编辑IDT(中断描述符表),我已经找到了可以访问该结构的文件。但是我不明白asm行中的冒号是什么。我猜这是一个用C语言制作位图的游戏,这是在某种程度上填充指令。但我找不到任何确定的东西

如果有帮助,编译器现在会说:
无效的“asm”:作为操作数的表达式无效
。还在和这个战斗…:)


那么,冒号在那里做什么呢?

这是来自
gcc
编译器的扩展asm语法。下面是一个描述语法的示例:

   asm ( assembler template 
       : output operands                  /* optional */
       : input operands                   /* optional */
       : list of clobbered registers      /* optional */
       );
举个例子:

    int a=10, b;
    asm ("movl %1, %%eax; 
          movl %%eax, %0;"
         :"=r"(b)        /* output */
         :"r"(a)         /* input */
         :"%eax"         /* clobbered register */
         );       
  • “b”是输出操作数,由%0引用,“a”是输入 操作数,由%1引用
  • “r”是对操作数的约束。我们会 请参见后面的约束详细信息。目前,“r”对GCC说 使用任何寄存器存储操作数。输出操作数 约束应具有约束修饰符“=”。这个修饰语呢 表示它是输出操作数且仅为写操作数
  • 有两个 %的前缀加在寄存器名称的前面。这有助于GCC区分 在操作数和寄存器之间。操作数有一个%as 前缀
  • 在第三个冒号之后被删除的寄存器%eax告诉GCC %eax的值将在“asm”内修改,因此GCC不会 使用此寄存器存储任何其他值

“编译器”:你在使用gcc吗?(这就是编写这些示例的目的。几乎每个编译器都有自己的内联汇编版本。)@Jongware:事实上,这个问题根本不是关于C语言的。我使用的是
GCC4.7.3
@JohnZwinck请随意重新标记这个问题。我承认我不知道应该如何标记它。