在C ++中使用ASM

时间:2012-08-14 09:54:05

标签: c++ assembly

我使用以下代码:

int _tmain(int argc, _TCHAR* argv[])
{
    __asm{ 
           "MOV EAX, DMSN[0]";
           "LEA EBX, DMSN[0]";
           "CALL EBX";
         };
    return 0;
}

MOV EAXLEA EBX稍后会包含两个不同的数组。 但就示例而言,它们将包含相同的内容。

我使用以下内容:

const BYTE DMSN[694]={blah, blah, blah};

但是我想出现这些错误:

1>c:\users\1337\documents\visual studio 2010\projects\test2\test2\test2.cpp(49): error     C2400: inline assembler syntax error in 'opcode'; found 'bad token'
1>c:\users\1337\documents\visual studio 2010\projects\test2\test2\test2.cpp(50): error     C2400: inline assembler syntax error in 'opcode'; found 'bad token'
1>c:\users\1337\documents\visual studio 2010\projects\test2\test2\test2.cpp(51): error     C2400: inline assembler syntax error in 'opcode'; found 'bad token'**strong text**

有什么问题?

2 个答案:

答案 0 :(得分:2)

您的语法有问题,请按照以下方式使用: -

 int _tmain(int argc, _TCHAR* argv[])
    {
      _asm{ 
           mov eax, DMSN[0]
           lea ebx, DMSN[0]
           call ebx
          }
        return 0;
    }

用于基于VS的编译器。

答案 1 :(得分:1)

如果dmsn是数组,则不必使用[0]来访问第一个元素

int _tmain(int argc, _TCHAR* argv[])
{
    __asm{ 
           mov eax, DMSN
           lea ebx, DMSN
           call ebx
         };
    return 0;
}

mov指令将自动检查操作数大小,并将前32位寄存器(eax)和32位有效地址寄存器(ebx)

VC ++ 2010 express