我想计算单词的长度,但有错误。我不明白为什么。
int new_strlen(char* word)
{
int len = 0;
__asm__ ("mov ecx, 100\n\t"
"mov esi, %1\n\t"
"mov al, 0\n\t"
"repne scasb\n\t"
"mov %0, 100\n\t"
"sub %0, ecx\n\t"
: "=a"(len)
: "r"(word)
: "%ecx","%esi", "%eax"
);
return len;
}
我的错误是“‘asm’操作数具有不可能的约束”。
我尝试使用 __asm{} 构造,但它在 x64 架构上不可用。我正在使用“-masm=intel”标志编译程序。我的编译器是“g++”。我还尝试使用“volatile”,但它没用。 您对此事有什么想法吗?如果您能分享您的见解,我将不胜感激。 我非常感激!
我什么都尝试。请帮助我
谢谢大家的回答!我已经找到决定了
__asm__ ("mov rcx, 100; \n\t"
"mov rsi, %1; \n\t"
"mov al, 0; \n\t"
"repne scasb; \n\t"
"mov %0, 99; \n\t"
"sub %0, ecx; \n\t"
: "=a"(len)
: "g"(word));