幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5427|回复: 3

[通用编程] mov     ecx, dword ptr[pTone] 没去到指针指向的数

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2012-10-17 15:34:31 | 显示全部楼层 |阅读模式
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吗??
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

0

主题

16

帖子

128

积分

③业余

积分
128
QQ
发表于 2012-10-26 23:55:06 | 显示全部楼层

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]
}
回复 支持 反对

使用道具 举报

24

主题

117

帖子

1274

积分

⑥精研

积分
1274
QQ
发表于 2013-2-4 17:12:25 | 显示全部楼层
请改成 mov ecx, dword ptr [&pTone]
Tamashii是啥意思? 魂! ======================= 我真是败给C++的面向对象了啊……
回复 支持 反对

使用道具 举报

0

主题

1

帖子

8

积分

①新人

积分
8
发表于 2013-3-23 05:26:44 | 显示全部楼层

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

很好,辛苦楼主发这么有意义的文章
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 01:45 , Processed in 0.021991 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表