【发布时间】:2019-11-17 01:00:11
【问题描述】:
我很不擅长汇编,但我目前有一个使用 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 作为结果。
感谢您的帮助!
【问题讨论】:
-
你有什么问题?
-
我真的不明白为什么我的回报总是8
-
可能是因为您没有在循环内增加
eax?或者可能是因为您在循环中使用了esi,但没有将其分配给eax或res。 -
字符串有多长? :D 请注意,您也不需要
dec esi。cmp [entry+esi]也可能处理指针而不是指向的字符串。因此,在循环将entry加载到寄存器之前,例如mov ebx, [entry]然后使用cmp [ebx+esi], 0。最好确保使用字节比较,所以cmp byte ptr [ebx+esi], 0。 -
我更改了
cmp [entry+esi],它成功了。所以是的,它正在处理指针本身,而不是字符串
标签: c assembly inline-assembly