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

标签 c assembly inline-assembly

我不太擅长汇编,但我目前有一个使用 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。

感谢帮助!

最佳答案

我将发布更正后的代码,非常感谢 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);
}

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

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

相关文章:

将程序集转换为 C

assembly - 测试 xmm/ymm 寄存器是否为零的更快方法?

c - c 中的 x64 内联汇编以对齐指令

linux - 如何在内联汇编中通过 syscall 或 sysenter 调用系统调用?

c - 相当于 c 中的 rm –rf

c - 1- 在 C 中创建一个库 2- 在 MASM 中调用并使用它

c - 描述如下代码

assembly - xor 不同长度的十六进制字符串 NASM

c - 内联 C 汇编破坏了它自己的变量

c - 为什么这个 C 代码不工作?