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个结果。
感谢帮助!
我将发布更正后的代码,非常感谢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将指针值+索引与零而不是字符串内容进行了比较。