错误:‘asm’操作数具有不可能的约束

问题描述 投票:0回答:1

我想计算单词的长度,但有错误。我不明白为什么。

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”,但它没用。 您对此事有什么想法吗?如果您能分享您的见解,我将不胜感激。 我非常感激!

我什么都尝试。请帮助我

c assembly x86 g++ inline-assembly
1个回答
0
投票

谢谢大家的回答!我已经找到决定了

__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));
© www.soinside.com 2019 - 2024. All rights reserved.