1

我尝试在 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;
}

我希望输出是“10Press any key to continue ...”,
但不幸的是,输出是“3Press any key to continue ...” 对于 X[] 的任何值。
你能解释一下错误在哪里吗???

4

2 回答 2

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;
于 2012-12-11T12:40:14.817 回答
1

我没有测试这个的环境,但我怀疑你在访问时需要另一个级别的间接str

LA:     MOV DL,BYTE PTR str[ESI];

您可能正在扫描指针的值而不是指向的字符串。

于 2012-12-11T12:28:05.327 回答