相关疑难解决方法(0)

为什么发出这样复杂的代码来将有符号整数除以2的幂?

当我用VC++ 10编译这段代码时:

DWORD ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)

我得到这个反汇编:

299: {
300:    DWORD ran = rand();
  00403940  call        dword ptr [__imp__rand (4050C0h)]  
301:    return ran / 4096;
  00403946  shr         eax,0Ch  
302: }
  00403949  ret
Run Code Online (Sandbox Code Playgroud)

这是一个干净,简洁,用一个逻辑右移的2的幂代替一个除法.

然而,当我编译这段代码时:

int ran = rand();
return ran / 4096;
Run Code Online (Sandbox Code Playgroud)

我得到这个反汇编:

299: {
300:    int ran = rand();
  00403940  call        dword ptr [__imp__rand (4050C0h)]  
301:    return ran / 4096;
  00403946  cdq  
  00403947  and         edx,0FFFh  
  0040394D  add         eax,edx  
  0040394F  sar         eax,0Ch  
302: }
  00403952  ret …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly division visual-c++

44
推荐指数
3
解决办法
3147
查看次数

标签 统计

assembly ×1

c++ ×1

division ×1

visual-c++ ×1

x86 ×1