Code Bye

c++asm汇编的问题

mov edi, [0x320F8F4] c++asm里翻译成 mov edi,0x320F8F4
mov edi,[0x0FB142C] c++asm里翻译成 mov edi,[0x0FB142C]
为毛,第一句,翻译的时候没有[]?
假如说规定如此,第2句为什么可以??????
解决方案

10

这两个不一样啊
前一个直接把立即数,赋值给寄存器
后一个,用立即数作为地址偏移量,取出其中的数据,赋值给寄存器

10

这是本人生成的反汇编代码:
int main()
{
00274460  push        ebp
00274461  mov         ebp,esp
00274463  sub         esp,0C0h
00274469  push        ebx
0027446A  push        esi
0027446B  push        edi
0027446C  lea         edi,[ebp-0C0h]
00274472  mov         ecx,30h
00274477  mov         eax,0CCCCCCCCh
0027447C  rep stos    dword ptr es:[edi]
_asm
{
mov edi,[0x320F8F4]
0027447E  mov         edi,320F8F4h
mov edi,[0x0FB142C]
00274483  mov         edi,0FB142Ch
}
return 0;
00274488  xor         eax,eax
}
0027448A  pop         edi
0027448B  pop         esi
0027448C  pop         ebx
0027448D  add         esp,0C0h
00274493  cmp         ebp,esp
}

10

int x,y;
x = 10;
y = x;
莫非原程序是这样的?
假如是这样的话,就好解释了
前一个是用常量表达式赋值
后一个是用变量赋值,
在不启动(常量代换)优化的话,前一个立即数,赋值
后一个要从地址中取出然后赋值

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++asm汇编的问题