我在汇编方面很糟糕,但我目前有一个使用 C 的作业和使用 VS2015 x86 native 编译器的内联汇编。我需要计算参数给出的字符串的大小。这是我的方法:

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);
}


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

帮助表示赞赏!

最佳答案

我将发布更正后的代码,非常感谢 clown 整理出来

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);
}

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

关于在 C 中使用内联汇编器计算字符串的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58896610/

10-12 20:36