我尝试在64位Windows 7下使用visual studio 2010编译以下代码。
#include "stdafx.h"
#include <iostream>
using namespace std;
int strlen2(char str[] )
{
int x ;
_asm
{
MOV ESI,0;
LA: MOV DL,BYTE PTR str[ESI];
CMP DL,0;
JE EXIT;
INC ESI;
JMP LA;
EXIT: MOV x,ESI;
};
return x;
}
int main()
{
char X[] ="string2222";
cout<<strlen2(X);
system("pause");
return 0;
}
我预计输出将是“10按任意键继续...”,但不幸的是,输出是 “3按任意键继续......”对于任何X []的值 你能解释一下错误在哪里???
答案 0 :(得分:3)
因为你正在测量指针的长度(幸运的是在顶部字节中为零),而不是字符串。
请改为尝试:
MOV ESI,0;
MOV EBX, strl
LA: MOV DL,[ESI + EBX];
CMP DL,0;
JE EXIT;
INC ESI;
JMP LA;
EXIT: MOV x,ESI;
答案 1 :(得分:1)
我没有测试环境,但我怀疑在
中访问str
时需要另一级间接
LA: MOV DL,BYTE PTR str[ESI];
您可能正在扫描指针的值而不是指向的字符串。