社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 道具中心
主题 : mov     ecx, dword ptr[pTone] 没去到指针指向的数据哇
secondsen 离线
级别: 总版主
显示用户信息 
0  发表于: 2012-10-17   
来源于 通用编程 分类

mov     ecx, dword ptr[pTone] 没去到指针指向的数据哇

VC内嵌的asm

pTone是一个指针

struct Tone
{
int red;
int green;
int blue;
int gray;
}


mov                ecx, dword ptr[pTone]
我看到的结果是。。。

pTone = 0x0013fe8c
pTone只想的数据
{
0x00000064
0x00000064
0x00000064
0x0000004b
}
exc = 0x0013fe8c
为啥ecx得到的是 pTone的值,而不是pTone指向的值啊??不应该得到 0x00000064吗??
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
weiwuyuan 离线
级别: ②入门
显示用户信息 
1  发表于: 2012-10-26   
Re:mov     ecx, dword ptr[pTone] 没去到指针指向的数据哇
这个我也不太清楚,
不过,这不属于汇编语法,而是要看编译器怎么翻译,因为pTone是C++里的变量,

我估计可能是这样的:
编译器只是把pTone看成一个变量,值就是他本身的地址,然后通过[pTone] 来取该地址下的值,
所以,[pTone] 得到的就是pTone的值,也就是pTone所指向的地址
就是说编译器不会检查pTone是不是指针,它是一律把[X]中的X翻译成该变量本身的地址,就象汇编里一律把标号翻译成它的偏移地址一样

所以呢,如果你非要用C++变量做寻址的话,就一律用非指针的变量名就行了,
即:
Tone t = { 100, 200, 300, 400 };
 __asm
 {
  mov  ecx, dword ptr[t]
 }

也可以这样:
Tone t = { 100, 200, 300, 400 };
 __asm
 { 
  lea ebx, t
  mov  ecx, dword ptr[ebx]
 }



[ 此帖被weiwuyuan在2012-10-27 00:21重新编辑 ]
tamashii 离线
级别: ③业余
显示用户信息 
2  发表于: 2013-02-04   
请改成 mov ecx, dword ptr [&pTone]
Tamashii是啥意思?
魂!
=======================
我真是败给C++的面向对象了啊……
asaogwgs 离线
级别: ①新人
显示用户信息 
3  发表于: 2013-03-23   
Re:mov???? ecx, dword ptr[pTone] 没去到指针指向的数据哇
很好,辛苦楼主发这么有意义的文章
描述
快速回复

认证码:

验证问题:
12-5=?,答案:7 正确答案:7
按"Ctrl+Enter"直接提交