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

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

我的汇编能力很差,但是目前我有一个使用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);
}

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

感谢您的帮助!

c assembly inline-assembly
1个回答
1
投票

我将发布更正的代码,非常感谢杰斯特的整理

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

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

© www.soinside.com 2019 - 2024. All rights reserved.