C;内联汇编语法错误“数值常量前的预期字符串文字”

时间:2013-09-30 20:16:54

标签: c inline-assembly

当我编译以下示例代码(这些代码本质上是垃圾程序集语句而没有实际用途)时,我收到以下错误;

  

def-asm-pop.c:13:3:错误:数字前的预期字符串文字   恒定

第13行是未注释的“ASM”行;

#define iMOV "mov %eax,%ebx\n\t"
#define iNOP "nop\n\t"
#define iASM __asm__(iMOV iNOP)

#define MOV 0xB8
#define NOP 0x90
#define ASM __asm__(MOV NOP)

int main() {

  //iASM;    /* This one works when uncommented */

  ASM;       /* The one causes the error when uncommented */

  return 0;

}

我的 Hello World 样式尝试内联汇编可能有错误,但这是我要克服的另一个敲门砖。在这个时间点,我似乎无法定义操作码列表,然后定义一个由它们构建的汇编语句列表,就像我可以通过定义文本命令一样。如何使ASMiASM声明一样工作?

2 个答案:

答案 0 :(得分:2)

正如错误消息所述,__asm__运算符需要一个字符串而不是一个数字,并且在该字符串中它需要有效的汇编程序。

您正在尝试直接编写二进制操作码,这与汇编程序没什么关系。

答案 1 :(得分:1)

这可能有效:

#define MOV ".byte 0xB8\n"
#define NOP ".byte 0x90\n"

确切的语法当然取决于您的汇编程序(相应的机器语言取决于您的目标平台)。除了试验之外,这没什么用处;这不是编写代码的好方法。