【发布时间】:2021-06-14 16:26:49
【问题描述】:
我想学习一些内联汇编编程,但是我的第一个 cod sn-p 不起作用。我有一个字符串,我想将字符串的值分配给 rsi 寄存器。
这是我的代码:
string s = "Hello world";
const char *ystr = s.c_str();
asm("mov %1,%%rsi"
:"S"(ystr)
:"%rsi" //clobbered register
);
return 0;
它在令牌之前给了我错误:Expected ')'。任何帮助表示赞赏。
【问题讨论】:
-
你真的在代码中写了
;clobbered register吗? -
是的,但我写的是评论。
-
C++ 中的注释以
//开头,而不是;。 -
您还有其他几个问题:(1) 扩展 asm 操作数从 0 开始编号,而不是 1 (2) 指定
S约束已经导致编译器将值加载到rsi, 所以mov是不必要的 (3) 你不能破坏操作数被限制加载到的同一个寄存器。 -
(4) 第一个冒号后面的操作数应该是输出,而不是输入;
"mov %0, %%rsi"和"S"之间需要两个冒号。
标签: c++ inline-assembly