酢ろぐ!

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

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回演算していることがわかりました。おわり。