使用 Visual Studio 2010 的 C++ 内联程序集

inline assembly in c++ using visual studio 2010?

本文关键字:程序集 C++ Visual Studio 2010 使用      更新时间:2023-10-16

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

因为你测量的是指针的长度(幸运的是,指针的顶部字节为零),而不是字符串。

试试这个:

        MOV ESI,0;
        MOV EBX, strl
LA:     MOV DL,[ESI + EBX];
        CMP DL,0;
        JE EXIT;
        INC ESI;
        JMP LA;
EXIT:   MOV x,ESI;
我没有

环境来测试这一点,但我怀疑您在访问 str

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

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