使用visual studio 2010在c ++中进行内联汇编?

时间:2012-12-11 12:24:51

标签: c++ assembly

我尝试在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 []的值 你能解释一下错误在哪里???

2 个答案:

答案 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];

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