首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中内嵌汇编,不正确的操作数类型解决思路

2012-03-09 
C++中内嵌汇编,不正确的操作数类型我在一个类的成员函数中嵌入汇编代码_asm{leaedi,m_xxx......movdwordpt

C++中内嵌汇编,不正确的操作数类型
我在一个类的成员函数中嵌入汇编代码
_asm
{
          lea   edi,m_xxx
          ...
          ...
          mov   dword   ptr   m_yyy,eax
}
其中m_xxx和m_yyy均为类的成员变量,类型是BYTE型数组
在VS2005下编译时两句均报错:
error   C2415:不正确的操作数类型
而把m_xxx和m_yyy换成相同类型的全局变量则程序运行正常,能达到想要的目标
但是为了结构合理必须要改成使用类的成员变量,请教这里该如何使用

[解决办法]
成员变量当然不可以了,你需要明确地用this+偏移量
[解决办法]
因为C++命名修饰的缘故,成员变量在C++ => asm时名字变了,直接引用很困难,借助临时变量更方便,虽然有效率开销。用偏移量不安全,万一什么时候加减了什么变量,就会取错变量。
BYTE *x = m_xxx;
BYTE *y = m_yyy;
_asm
{
lea edi,x
...
...
mov dword ptr y,eax
}

[解决办法]
因为C++命名修饰的缘故,成员变量在C++ => asm时名字变了

没有改变名字,因为成员变量在内存中的具体位置依赖this指针。
[解决办法]
你用的什么编译器?
vc6/vc8提示找不到变量

热点排行