在令牌内联程序集错误之前预期为 ')'

安德拉斯·M·西拉吉

我想学习一些内联汇编编程,但我的第一个代码片段不起作用。我有一个字符串,我想将字符串的值分配给 rsi 寄存器。

这是我的代码:

    string s = "Hello world";
    const char *ystr = s.c_str();
    asm("mov %1,%%rsi"
    :"S"(ystr)
    :"%rsi" //clobbered register
);

    return 0;

它给了我错误 :Expected ')' 在令牌之前。任何帮助表示赞赏。

彼得·科德斯

您遗漏了 a:来分隔空的输出部分。"S"(ystr)输出部分中的输入操作数也是如此,并且"%rsi"在输入部分中,而不是clobbers。

但是作为输入,它缺少语法(var_name)部分"constraint"(var_name)所以这是一个语法错误,也是一个语义错误。这是错误的直接来源<source>:9:5: error: expected '(' before ')' tokenhttps://godbolt.org/z/97aTdjE8K


正如 Nate 指出的那样,您还有其他几个错误,例如试图强制输入选择带有"S".

   char *output;   // could be a dummy var if you don't actually need it.
   asm("mov %1, %0"
     : "=r" (output)     /// compiler picks a reg for you to write to.
    :"S"(ystr)           // force RSI input
    :   // no clobbers
   );

请注意,这并不能告诉你读取或写入指针指向的内存,所以这只是安全的周边这样的事情,它复制地址,但不希望读取或写入指针指向的数据编译器。

还相关:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在“;”之前得到“错误:预期的']' 令牌”在C中声明数组时

“令牌”之前的预期初始化程序

IIS Web平台安装程序错误:“ doctype”是意外令牌。预期的令牌为“ DOCTYPE”。1号线,位置3

错误:预期为';' 在'generationString'之前

语法错误:意外的令牌,预期为“ </>”

预期在'。'之前的初始化程序。令牌C ++

将生成的程序集重写为GCC内联程序集

如何在';'之前固定预期的标识符 令牌错误

JSX错误:意外令牌,预期为“,”

ReactJS:解析错误:意外的令牌,预期为“}”

反应:解析错误:意外的令牌,预期为“(”

C ++错误-预期在'。'之前的主表达式 令牌|

错误:“ <”令牌之前的预期模板名称

错误:带有索引或迭代字符串的'<'令牌之前的预期初始化程序

错误:“:”令牌之前的预期“)”

C ++-错误:“ {”令牌之前的预期类名

'='令牌之前的预期符号

解决预期的“;” 在“ {”令牌之前

'{'令牌错误之前的预期类名

cryptopp错误:预期在'{'令牌之前的'=',',',';','asm'或'__attribute__'

错误:“ =”令牌之前的预期非限定ID

错误:“&”令牌之前的预期“)”

错误:预期为';' 在'printf'C之前

在'['令牌C程序(DEV C ++)之前预期的主表达式错误

使用结构时“预期”;“,”或“或”)“之前”*“令牌”错误

令牌“}”上的 Java 错误预期为“{”

rustc 内联时生成错误的程序集

构建错误 - '.' 之前的预期主表达式 令牌

“'{'令牌之前的错误预期表达式”