在类成员函数嵌入汇编,不能调用成员变量

t30220752 2007-04-26 02:57:53
在类成员函数嵌入汇编,不能调用成员变量
如:
class C
{
public:
char b ;
void fun()
{
__asm{
mov b,0
}
}
};

会提出错.
"不正确的操作数类型"
咋办?
...全文
426 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
__asm{
mov eax,this
add eax,i
mov edx,1 // 数组下标
mov dword ptr [eax+edx*4],23fah
}
t30220752 2007-05-29
  • 打赏
  • 举报
回复
现在可以总结如下:
采用char/int/void*都可以解决,但如果是用数组,而且用movq指令呢?例如:
class c
{
public:
unsigned int i[10];
void fun2()
{
i[1] = 0x2af3;
}
};
那要如何做?
好像
__asm{
mov eax,this ;
mov dword ptr [i[1]+eax], 0x2af3 ;
}
是不行的。
  • 打赏
  • 举报
回复
看看编译器是怎么写的.
class test
{
int a;
int *pa;
public:
void Do()
{
00401000 push ebp
00401001 mov ebp,esp
00401003 push ecx
00401004 mov dword ptr [ebp-4],ecx
a=1;
00401007 mov eax,dword ptr [this]
0040100A mov dword ptr [eax],1
pa=0;
00401010 mov ecx,dword ptr [this]
00401013 mov dword ptr [ecx+4],0
}
0040101A mov esp,ebp
0040101C pop ebp
0040101D ret
}
RuoMu 2007-05-16
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
__asm{
mov eax,this
mov byte ptr [eax+b],0
mov dword ptr [eax+lpc],0
mov dword ptr [eax+n],0
}
t30220752 2007-05-15
  • 打赏
  • 举报
回复
那么说就是:
 mov eax,this
mov unsigned int ptr [eax+n],0

mov eax,this
mov char * ptr [eax+lpc],0

??
这样子不行哟!真不好意思哟,汇编没学好!还求各位帮帮喽。
  • 打赏
  • 举报
回复
照葫芦画瓢。
t30220752 2007-05-12
  • 打赏
  • 举报
回复
那如果还有unsigned int ,char * lpc两种类型,要怎么做?如:
class C
{
public:
char b ;

  unsigned int n ;
unsigned char * lpc ;

void fun()
{
__asm{
mov b,0
mov lpc,0
mov n,0
}
}
};

这样要怎么写?
pig4210 2007-05-03
  • 打赏
  • 举报
回复
同意楼上的说法
  • 打赏
  • 举报
回复
这样才行:
__asm{
mov eax,this
mov byte ptr [eax+b],0
}
ykzhujiang 2007-05-03
  • 打赏
  • 举报
回复
楼上这个写法不对的,b不能表示偏移
combojiang 2007-04-27
  • 打赏
  • 举报
回复
原因是因为类的成员访问都是通过this指针来访问的。
void fun()
{
this->b = 0;
}
不过通常我们在c++中可以不写this,直接b = 0;
但是在汇编中是不能这么写的。汇编中必须以this + 偏移的方式来访问成员变量的。本例中,this和b的地址是一样的。因此可以写成:
mov byte ptr [this],0
combojiang 2007-04-27
  • 打赏
  • 举报
回复
欢迎加入汇编应用群: 33756710
mengshijie_1981 2007-04-27
  • 打赏
  • 举报
回复
总结combojiang(combojiang)的经验,是否最规范的写法应该是:
mov byte ptr [this+b],0
ykzhujiang 2007-04-26
  • 打赏
  • 举报
回复
mov byte ptr [this],0
大熊猫侯佩 2007-04-26
  • 打赏
  • 举报
回复
mov byte ptr b,0
《仙剑奇侠传》之父姚壮宪热情推荐,技术作家孟岩高度评价! 云风也是我在中国最佩服的游戏开发者。看了云风的研发历程,我觉得就是一部中国的游戏程序史,从最早的 Z80 , 6502 , PC8088 , 286 , 386…DOS ,保护模式, Assembler 到 C++ 的整个发展轨迹。这本书可以说横跨了游戏程序的过去、现在和未来。 书中传达的不仅是一些实用的技术经验,更是传达一种理念——虽然研发的环境随着时代而变,但研发的精神是不变的,那就是“在实践中积累”。 ——《仙剑奇侠传》之父 姚壮宪 之前我经常奇怪,云风还非常年轻,他程序思想中的那种老练的智慧是从何处得来的呢?读完这本书之后,我终于明白,还是那句话:“无他,唯手熟耳”。 面对这沉甸甸的作品,我确实感到,这是云风用心写的书。用心写的书,当然出色。 ——技术作家 孟岩 我现在是中国并不成熟的游戏制作行业中的一员,游戏给了我太多,我告诉自己需要做一点事情。分享知识和经验是我的义务,别无它。 ——云风 内容简介 本书忠实地记录了作者十余年来对游戏编程的所思、所感、所悟。全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技术,从非常专业的汇编优化到非常实际的项目管理进行了一次游戏开发的全景探索。 本书不仅适合游戏开发者阅读,也会给所有的开发者和程序爱好者带来启示。 作者简介 云风,时年二十七岁。自幼学习编程,十数年从未间断,对程序设计有所领悟。大学时代开发的游戏图像引擎“风魂”曾用于多家游戏公司的游戏项目。参与过《大话西游》系列、《梦幻西游》、《网易泡泡游戏》的开发。现从事新一代网络游戏引擎的研究与开发,并在游戏模式上做一些新的尝试。 性格开朗,兴趣广泛,好交友,绝非沉浸在计算机世界中的书呆子。国学、历史书籍常备案头,以先贤之教诲修其心;休息时常作户外运动,尤其喜爱攀岩。 目录 第1章 计算机,游戏,我 1 1.1 计算机 2 1.2 计算机游戏 3 1.3 计算机与我 7 1.3.1 启蒙 7 1.3.2 编程 9 第2章 算法,程序的灵魂 13 2.1 程序=算法+数据结构 14 2.1.1 算法 15 2.1.2 数据结构 17 2.2 搜索算法 23 2.2.1 地图寻路问题 23 2.2.2 博弈问题 27 2.2.3 更为广泛的运用 28 2.3 智能算法 29 2.3.1 遗传算法(Genetic Algorithm) 29 2.3.2 模拟退火算法(Simulated Annealing) 31 2.3.3 禁忌搜索(Tabu Search) 33 2.3.4 人工神经网络 (Artificial Neural Network) 34 2.4 优化 36 2.4.1 质数问题 36 1.4.2 俄罗斯方块竞赛 37 2.5 Apple II上的编程之路 39 第3章 编程语言 45 3.1 C 语言 46 3.2 BASIC 50 3.3 C++ 51 3.4 汇编语言 54 3.4.1 概述 55 3.4.2 程序的本质 57 3.4.3 寄存器 58 3.4.4 寻址方式 60 3.4.5 汇编指令 61 3.4.6 C/C++ 语言和汇编 62 3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 VESA 标准 72 4.2.4 花絮 74 4.3 保护模式下的开发工具 75 4.4 闲话 Allegro 81 4.4.1 用C与汇编写成的程序库 81 4.4.2 BITMAP 82 4.4.3 Sprite 85 4.4.4 几何图形和 3D 89 4.4.5 数据文件 91 4.4.6 声音 92 4.4.7 其他的部分 93 4.4.8 小结 94 4.5 cfido 中国惠多网 94 第5章 Windows 编程 101 5.1 Windows编程入门 104 5.1.1 Windows版本综述 105 5.1.2 操作系统的核心 107 5.1.3 Windows API和DLL 110 5.1.4 COM 111 5.1.5 Windows的窗口和消息处理与传递 114 5.1.6 Windows GDI 125 5.2 控制游戏的速度 130 5.3 浅谈MFC 132 5.4 小结 132 第6章 汇编优化 135 6.1 浅谈代码优化 138 6.2 并不仅仅是汇

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧