关于vs2010 release编译有些代码没有编译的问题[查看汇编后得知]

时间:2021-09-26 16:39:26
原来的代码[非汇编]
if(lpObj->comboSkill.dwTime>=GetTickCount())
{
         //_asm{mov dword ptr ss:[ebp+0x20],1}
         GCMagicAttackNumberSend(lpObj,59,lpTargetObj->m_Index,1);
bCombo=1;
}
使用release编译[汇编代码]
; 274  :  if(lpObj->comboSkill.dwTime>=GetTickCount())

  000ad ff 15 00 00 00
00  call  DWORD PTR __imp__GetTickCount@0
  000b3 39 87 94 00 00
00  cmp  DWORD PTR [edi+148], eax
  000b9 72 12  jb  SHORT $LN1@gObjAttack

; 275  :  {
; 276  :  //_asm{mov dword ptr ss:[ebp+0x20],1}
; 277  :  GCMagicAttackNumberSend(lpObj,59,lpTargetObj->m_Index,1);

  000bb 8b 0b  mov  ecx, DWORD PTR [ebx]
  000bd 6a 01  push  1
  000bf 51  push  ecx
  000c0 6a 3b  push  59 ; 0000003bH
  000c2 57  push  edi
  000c3 ba 96 6a 40 00  mov  edx, 4221590 ; 00406a96H
  000c8 ff d2  call  edx
  000ca 83 c4 10  add  esp, 16 ; 00000010H
$LN1@gObjAttack:

; 278  :  bCombo=1;
; 279  :  }
; 280  :  }
; 281  :  }
; 282  :  }
; 283  :  }
; 284  :  }
; 285  :  _asm


发现 bCombo=1; 没有汇编,直接跳过此语句

而使用debug模式编译,那么bCombo=1;这个语句就是正确汇编的,请问大大们是什么原因?

4 个解决方案

#1


没用的语句就可以优化掉。

#2


没用的src,会被优化的,
vc 有选项设置的,你可以选择不要,

不然  release版本 怎么会比  debug快呢
而且 有时候顺序也会被调整的,比如避免对同一个寄存器 进行连续操作

#3


引用 2 楼 relaxisland 的回复:
没用的src,会被优化的,
vc 有选项设置的,你可以选择不要,

不然  release版本 怎么会比  debug快呢
而且 有时候顺序也会被调整的,比如避免对同一个寄存器 进行连续操作

你好,之前没人回,我就很灰心,请问怎么 vs哪里可以设置的
因为我下面是用汇编进行使用此代码的,所以一定需要的,谢谢

#4


不需要不编译。

#1


没用的语句就可以优化掉。

#2


没用的src,会被优化的,
vc 有选项设置的,你可以选择不要,

不然  release版本 怎么会比  debug快呢
而且 有时候顺序也会被调整的,比如避免对同一个寄存器 进行连续操作

#3


引用 2 楼 relaxisland 的回复:
没用的src,会被优化的,
vc 有选项设置的,你可以选择不要,

不然  release版本 怎么会比  debug快呢
而且 有时候顺序也会被调整的,比如避免对同一个寄存器 进行连续操作

你好,之前没人回,我就很灰心,请问怎么 vs哪里可以设置的
因为我下面是用汇编进行使用此代码的,所以一定需要的,谢谢

#4


不需要不编译。