我想学习一些内联汇编编程,但我的第一个代码片段不起作用。我有一个字符串,我想将字符串的值分配给 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 ')' token
。https://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] 删除。
我来说两句