酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

32bit CPUでは、64bitの演算がどのようにおこなわれているか調べてみた

昨日「C99でlong long int型が予約語に増えました。32bitCPUではこのlong long intの演算をどのように扱っているのか」と、考えていました。

考えるもなにも、実際にVCの混合モードでアセンブラをみたら解決しました。

void oppai(void)
{
  unsigned long long int hogehoge;
  hogehoge = 0xffffffffffffffff;
}

こんなCプログラムを書きました。これでlong long int型(64bit)がどういう扱いになるかがわかります。

unsigned long long int hogehoge;
hogehoge = 0xffffffffffffffff;

0041138E  mov         dword ptr [hogehoge],0FFFFFFFFh 
00411395  mov         dword ptr [ebp-8],0FFFFFFFFh 

32bit(dword型)で2回演算していることがわかりました。

おわり。