|
|
||
ハチロクSkypeチャットで話題になったので、long long intがどういう風に処理されてるのか気になったから調べてみた。
そーすはこんな感じ。
#include<stdio.h> int main(){ long long int a,b,c; a = 10; b = 10; c = a + b; printf("%ld\n", c ); }
特に何もオプションをつけずに32bit環境でgccでコンパイル。
a = 10;
80485a0: c7 45 f8 0a 00 00 00 movl $0xa,0xfffffff8(%ebp)
80485a7: c7 45 fc 00 00 00 00 movl $0x0,0xfffffffc(%ebp)
b = 10;
80485ae: c7 45 f0 0a 00 00 00 movl $0xa,0xfffffff0(%ebp)
80485b5: c7 45 f4 00 00 00 00 movl $0x0,0xfffffff4(%ebp)
c = a + b;
80485bc: 8b 45 f0 mov 0xfffffff0(%ebp),%eax
80485bf: 8b 55 f4 mov 0xfffffff4(%ebp),%edx
80485c2: 03 45 f8 add 0xfffffff8(%ebp),%eax
80485c5: 13 55 fc adc 0xfffffffc(%ebp),%edx
80485c8: 89 45 e8 mov %eax,0xffffffe8(%ebp)
80485cb: 89 55 ec mov %edx,0xffffffec(%ebp)
printf("%ld\n", c );
80485ce: 83 ec 04 sub $0x4,%esp
80485d1: ff 75 ec pushl 0xffffffec(%ebp)
80485d4: ff 75 e8 pushl 0xffffffe8(%ebp)
80485d7: 68 67 86 04 08 push $0x8048667
80485dc: e8 07 fe ff ff call 80483e8 <_init+0x24>
32bitごとに処理してるみたいですね。
「-march=athlon64 -msse3」とかやっても結果は同じでした。
ちなみに64bit環境では、
a = 10;
4008e8: 48 c7 45 e8 0a 00 00 movq $0xa,-0x18(%rbp)
4008ef: 00
b = 10;
4008f0: 48 c7 45 f0 0a 00 00 movq $0xa,-0x10(%rbp)
4008f7: 00
c = a + b;
4008f8: 48 8b 45 f0 mov -0x10(%rbp),%rax
4008fc: 48 03 45 e8 add -0x18(%rbp),%rax
400900: 48 89 45 f8 mov %rax,-0x8(%rbp)
printf( "%ld\n", c );
400904: 48 8b 75 f8 mov -0x8(%rbp),%rsi
400908: bf 48 0a 40 00 mov $0x400a48,%edi
40090d: b8 00 00 00 00 mov $0x0,%eax
400912: e8 01 fd ff ff callq 400618 <printf@plt>
ちゃんと64bitな命令を使ってますね。当たり前だけど。
yuyarin2008/05/10 13:12調査サンクス!
Tyya2011/05/07 16:18Posts like this bhirgten up my day. Thanks for taking the time.
mizcuifv2011/05/08 11:28d3dXIj <a href="http://xvqrpwdxmjxn.com/">xvqrpwdxmjxn</a>
kgjaeiyaxx2011/05/09 13:38ub7rHA , [url=http://olwklitfxonq.com/]olwklitfxonq[/url], [link=http://xjhxqiboiswm.com/]xjhxqiboiswm[/link], http://orqbxitujfmb.com/
oqgubbskbk2011/05/10 13:45dwT4Mf <a href="http://jjblpsaodcul.com/">jjblpsaodcul</a>
hhjkgmgpkf2011/05/16 00:192PbW6i , [url=http://bcmstntviytm.com/]bcmstntviytm[/url], [link=http://murpylufatgw.com/]murpylufatgw[/link], http://dgsqzdiumtnk.com/