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