secondsen 发表于 2012-10-17 15:34:31

mov     ecx, dword ptr[pTone] 没去到指

VC内嵌的asm

pTone是一个指针

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


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

pTone = 0x0013fe8c
pTone只想的数据
{
0x00000064
0x00000064
0x00000064
0x0000004b
}
exc = 0x0013fe8c
为啥ecx得到的是 pTone的值,而不是pTone指向的值啊??不应该得到 0x00000064吗??

weiwuyuan 发表于 2012-10-26 23:55:06

Re:mov     ecx, dword ptr[pTone] 没去

这个我也不太清楚,
不过,这不属于汇编语法,而是要看编译器怎么翻译,因为pTone是C++里的变量,

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

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

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

tamashii 发表于 2013-2-4 17:12:25

请改成 mov ecx, dword ptr [&pTone]

asaogwgs 发表于 2013-3-23 05:26:44

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

很好,辛苦楼主发这么有意义的文章
页: [1]
查看完整版本: mov     ecx, dword ptr[pTone] 没去到指针指向的数