在C语言中使用内联汇编器计算字符串的大小

Cat*_*lar 3 c assembly inline-assembly

我的汇编能力很差,但是目前我有使用C的赋值和使用VS2015 x86本机编译器的内联汇编。我需要计算参数给定的字符串的大小。这是我的方法:

void calculateLength(unsigned char *entry)
{
    int res;
    __asm {
        mov esi, 0
        strLeng:
            cmp [entry+ esi], 0
            je breakLength
            inc esi
            jmp strLeng
        breakLength:
        dec esi
        mov res, esi
    }
    printf("%i", res);
}

Run Code Online (Sandbox Code Playgroud)

我的想法是增加esi注册表,直到找到空字符为止,但是每次得到8个结果。

感谢帮助!

Cat*_*lar 5

我将发布更正后的代码,非常感谢Jester对其进行了整理

void calculateLength(unsigned char *entry) {
    int res;
    __asm {
        mov esi, 0
        mov ebx, [entry]
        strLeng:
            cmp [ebx + esi], 0
            je breakLength
            inc esi
            jmp strLeng
        breakLength:
        mov res, esi
    }
    printf("%i", res);
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是cmp [entry+ esi], 0将指针值+索引与零而不是字符串内容进行了比较。

  • @ JL2210可能应该是“ entry”,但在编辑编辑时被遗忘了。 (2认同)