Guest User

stack overflow - xoorath

a guest
Jul 29th, 2010
242
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
  2.  
  3.     TITLE   c:\Documents and Settings\student.MULTIMEDIA\Desktop\case study\case study\main_case_study.cpp
  4.     .686P
  5.     .XMM
  6.     include listing.inc
  7.     .model  flat
  8.  
  9. INCLUDELIB OLDNAMES
  10.  
  11. PUBLIC  ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@      ; `string'
  12. PUBLIC  ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base
  13. PUBLIC  ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry
  14. PUBLIC  ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  15. PUBLIC  ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry
  16. PUBLIC  ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator bool
  17. PUBLIC  ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
  18. PUBLIC  ??_C@_0L@NFAOJDFF@?5seconds?4?6?$AA@        ; `string'
  19. PUBLIC  ??_C@_0CE@KABODEEL@?5calls?5to?5non?5inline?5function?5to@ ; `string'
  20. PUBLIC  ??_C@_0CA@OLIKOKKF@?5calls?5to?5inline?5function?5took?5?$AA@ ; `string'
  21. EXTRN   @__security_check_cookie@4:PROC
  22. EXTRN   __imp__getchar:PROC
  23. EXTRN   __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z:PROC
  24. EXTRN   __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z:PROC
  25. EXTRN   __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A:BYTE
  26. EXTRN   __imp__clock:PROC
  27. EXTRN   __imp_?length@?$char_traits@D@std@@SAIPBD@Z:PROC
  28. EXTRN   __imp_?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z:PROC
  29. EXTRN   __imp_?eof@?$char_traits@D@std@@SAHXZ:PROC
  30. EXTRN   __imp_?flags@ios_base@std@@QBEHXZ:PROC
  31. EXTRN   __imp_?width@ios_base@std@@QBEHXZ:PROC
  32. EXTRN   __imp_?width@ios_base@std@@QAEHH@Z:PROC
  33. EXTRN   __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z:PROC
  34. EXTRN   __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z:PROC
  35. EXTRN   __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z:PROC
  36. EXTRN   __imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ:PROC
  37. EXTRN   __imp_?rdstate@ios_base@std@@QBEHXZ:PROC
  38. EXTRN   __imp_?good@ios_base@std@@QBE_NXZ:PROC
  39. EXTRN   __imp_?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ:PROC
  40. EXTRN   __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ:PROC
  41. EXTRN   __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC
  42. EXTRN   __imp_?uncaught_exception@std@@YA_NXZ:PROC
  43. EXTRN   __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC
  44. EXTRN   __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC
  45. EXTRN   __imp_?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ:PROC
  46. ;   COMDAT ??_C@_0CA@OLIKOKKF@?5calls?5to?5inline?5function?5took?5?$AA@
  47. CONST   SEGMENT
  48. ??_C@_0CA@OLIKOKKF@?5calls?5to?5inline?5function?5took?5?$AA@ DB ' calls '
  49.     DB  'to inline function took ', 00H     ; `string'
  50. CONST   ENDS
  51. ;   COMDAT ??_C@_0CE@KABODEEL@?5calls?5to?5non?5inline?5function?5to@
  52. CONST   SEGMENT
  53. ??_C@_0CE@KABODEEL@?5calls?5to?5non?5inline?5function?5to@ DB ' calls to '
  54.     DB  'non inline function took ', 00H        ; `string'
  55. CONST   ENDS
  56. ;   COMDAT ??_C@_0L@NFAOJDFF@?5seconds?4?6?$AA@
  57. CONST   SEGMENT
  58. ??_C@_0L@NFAOJDFF@?5seconds?4?6?$AA@ DB ' seconds.', 0aH, 00H ; `string'
  59. __bad_alloc_Message DD FLAT:??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
  60. ;   COMDAT ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@
  61. CONST   SEGMENT
  62. ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ DB 'bad allocation', 00H ; `string'
  63. ; Function compile flags: /Ogtpy
  64. ; File c:\program files\microsoft visual studio 9.0\vc\include\ostream
  65. CONST   ENDS
  66. ;   COMDAT ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ
  67. _TEXT   SEGMENT
  68. ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ PROC ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base, COMDAT
  69. ; _this$ = eax
  70.  
  71. ; 82   :            if (_Myostr.rdbuf() != 0)
  72.  
  73.     mov eax, DWORD PTR [eax]
  74.     mov ecx, DWORD PTR [eax]
  75.     mov edx, DWORD PTR [ecx+4]
  76.     mov eax, DWORD PTR [edx+eax+40]
  77.     test    eax, eax
  78.     je  SHORT $LN1@Sentry_bas
  79.  
  80. ; 83   :                _Myostr.rdbuf()->_Unlock();
  81.  
  82.     mov ecx, eax
  83.     jmp DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ
  84. $LN1@Sentry_bas:
  85.  
  86. ; 84   :            }
  87.  
  88.     ret 0
  89. ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  90. ; Function compile flags: /Ogtpy
  91. _TEXT   ENDS
  92. ;   COMDAT ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z
  93. _TEXT   SEGMENT
  94. ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z PROC ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base, COMDAT
  95. ; _this$ = esi
  96. ; __Ostr$ = eax
  97.  
  98. ; 75   :            {   // lock the stream buffer, if there
  99.  
  100.     mov DWORD PTR [esi], eax
  101.  
  102. ; 76   :            if (_Myostr.rdbuf() != 0)
  103.  
  104.     mov ecx, DWORD PTR [eax]
  105.     mov edx, DWORD PTR [ecx+4]
  106.     mov eax, DWORD PTR [edx+eax+40]
  107.     test    eax, eax
  108.     je  SHORT $LN8@Sentry_bas@2
  109.  
  110. ; 77   :                _Myostr.rdbuf()->_Lock();
  111.  
  112.     mov ecx, eax
  113.     call    DWORD PTR __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ
  114. $LN8@Sentry_bas@2:
  115.  
  116. ; 78   :            }
  117.  
  118.     mov eax, esi
  119.     ret 0
  120. ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ENDP ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base
  121. ; Function compile flags: /Ogtpy
  122. _TEXT   ENDS
  123. ;   COMDAT ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ
  124. _TEXT   SEGMENT
  125. ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator bool, COMDAT
  126. ; _this$ = eax
  127.  
  128. ; 116  :            return (_Ok);
  129.  
  130.     mov al, BYTE PTR [eax+4]
  131.  
  132. ; 117  :            }
  133.  
  134.     ret 0
  135. ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator bool
  136. _TEXT   ENDS
  137. EXTRN   ___security_cookie:DWORD
  138. EXTRN   ___CxxFrameHandler3:PROC
  139. ;   COMDAT xdata$x
  140. ; File c:\program files\microsoft visual studio 9.0\vc\include\ios
  141. xdata$x SEGMENT
  142. __unwindtable$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ DD 0ffffffffH
  143.     DD  FLAT:__unwindfunclet$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ$0
  144. __ehfuncinfo$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ DD 019930522H
  145.     DD  01H
  146.     DD  FLAT:__unwindtable$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ
  147.     DD  2 DUP(00H)
  148.     DD  2 DUP(00H)
  149.     DD  00H
  150.     DD  01H
  151. ; Function compile flags: /Ogtpy
  152. ; File c:\program files\microsoft visual studio 9.0\vc\include\ostream
  153. xdata$x ENDS
  154. ;   COMDAT ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ
  155. _TEXT   SEGMENT
  156. __$EHRec$ = -12                     ; size = 12
  157. _this$ = 8                      ; size = 4
  158. ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry, COMDAT
  159.  
  160. ; 102  :            {   // destroy the object
  161.  
  162.     push    -1
  163.     push    __ehhandler$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ
  164.     mov eax, DWORD PTR fs:0
  165.     push    eax
  166.     push    esi
  167.     mov eax, DWORD PTR ___security_cookie
  168.     xor eax, esp
  169.     push    eax
  170.     lea eax, DWORD PTR __$EHRec$[esp+20]
  171.     mov DWORD PTR fs:0, eax
  172.     mov esi, DWORD PTR _this$[esp+16]
  173.     mov DWORD PTR __$EHRec$[esp+28], 0
  174.  
  175. ; 103  :
  176. ; 104  :  #if _HAS_EXCEPTIONS
  177. ; 105  :            if (!_XSTD uncaught_exception())
  178.  
  179.     call    DWORD PTR __imp_?uncaught_exception@std@@YA_NXZ
  180.     test    al, al
  181.     jne SHORT $LN1@sentry
  182.  
  183. ; 106  :                this->_Myostr._Osfx();
  184.  
  185.     mov ecx, DWORD PTR [esi]
  186.     call    DWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ
  187. $LN1@sentry:
  188.  
  189. ; 107  :            }
  190.  
  191.     mov DWORD PTR __$EHRec$[esp+28], -1
  192.     mov eax, DWORD PTR [esi]
  193.     mov ecx, DWORD PTR [eax]
  194.     mov edx, DWORD PTR [ecx+4]
  195.     mov eax, DWORD PTR [edx+eax+40]
  196.     test    eax, eax
  197.     je  SHORT $LN5@sentry
  198.     mov ecx, eax
  199.     call    DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ
  200. $LN5@sentry:
  201.     mov ecx, DWORD PTR __$EHRec$[esp+20]
  202.     mov DWORD PTR fs:0, ecx
  203.     pop ecx
  204.     pop esi
  205.     add esp, 12                 ; 0000000cH
  206.     ret 4
  207. _TEXT   ENDS
  208. ;   COMDAT text$x
  209. text$SEGMENT
  210. __unwindfunclet$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ$0:
  211.     mov eax, DWORD PTR _this$[ebp-4]
  212.     jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  213. __ehhandler$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ:
  214.     mov edx, DWORD PTR [esp+8]
  215.     lea eax, DWORD PTR [edx-4]
  216.     mov ecx, DWORD PTR [edx-8]
  217.     xor ecx, eax
  218.     call    @__security_check_cookie@4
  219.     mov eax, OFFSET __ehfuncinfo$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ
  220.     jmp ___CxxFrameHandler3
  221. text$x  ENDS
  222. ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry
  223. ;   COMDAT xdata$x
  224. ; File c:\program files\microsoft visual studio 9.0\vc\include\xiosbase
  225. xdata$x SEGMENT
  226. __unwindtable$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z DD 0ffffffffH
  227.     DD  FLAT:__unwindfunclet$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z$0
  228. __ehfuncinfo$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z DD 019930522H
  229.     DD  01H
  230.     DD  FLAT:__unwindtable$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z
  231.     DD  2 DUP(00H)
  232.     DD  2 DUP(00H)
  233.     DD  00H
  234.     DD  01H
  235. ; Function compile flags: /Ogtpy
  236. ; File c:\program files\microsoft visual studio 9.0\vc\include\ostream
  237. xdata$x ENDS
  238. ;   COMDAT ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z
  239. _TEXT   SEGMENT
  240. __$EHRec$ = -12                     ; size = 12
  241. _this$ = 8                      ; size = 4
  242. ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry, COMDAT
  243. ; __Ostr$ = esi
  244.  
  245. ; 95   :            {   // construct locking and testing stream
  246.  
  247.     push    -1
  248.     push    __ehhandler$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z
  249.     mov eax, DWORD PTR fs:0
  250.     push    eax
  251.     push    edi
  252.     mov eax, DWORD PTR ___security_cookie
  253.     xor eax, esp
  254.     push    eax
  255.     lea eax, DWORD PTR __$EHRec$[esp+20]
  256.     mov DWORD PTR fs:0, eax
  257.     mov edi, DWORD PTR _this$[esp+16]
  258.     mov DWORD PTR [edi], esi
  259.     mov eax, DWORD PTR [esi]
  260.     mov ecx, DWORD PTR [eax+4]
  261.     mov ecx, DWORD PTR [ecx+esi+40]
  262.     test    ecx, ecx
  263.     je  SHORT $LN5@sentry@2
  264.     call    DWORD PTR __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ
  265. $LN5@sentry@2:
  266.     mov DWORD PTR __$EHRec$[esp+28], 0
  267.  
  268. ; 96   :            if (_Ostr.good() && _Ostr.tie() != 0)
  269.  
  270.     mov edx, DWORD PTR [esi]
  271.     mov eax, DWORD PTR [edx+4]
  272.     add eax, esi
  273.     cmp DWORD PTR [eax+8], 0
  274.     jne SHORT $LN1@sentry@2
  275.     mov eax, DWORD PTR [eax+44]
  276.     test    eax, eax
  277.     je  SHORT $LN1@sentry@2
  278.  
  279. ; 97   :                _Ostr.tie()->flush();
  280.  
  281.     mov ecx, eax
  282.     call    DWORD PTR __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ
  283. $LN1@sentry@2:
  284.  
  285. ; 98   :            _Ok = _Ostr.good(); // store test only after flushing tie
  286.  
  287.     mov ecx, DWORD PTR [esi]
  288.     mov edx, DWORD PTR [ecx+4]
  289.     cmp DWORD PTR [edx+esi+8], 0
  290.     sete    al
  291.     mov BYTE PTR [edi+4], al
  292.  
  293. ; 99   :            }
  294.  
  295.     mov eax, edi
  296.     mov ecx, DWORD PTR __$EHRec$[esp+20]
  297.     mov DWORD PTR fs:0, ecx
  298.     pop ecx
  299.     pop edi
  300.     add esp, 12                 ; 0000000cH
  301.     ret 4
  302. _TEXT   ENDS
  303. ;   COMDAT text$x
  304. text$SEGMENT
  305. __unwindfunclet$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z$0:
  306.     mov eax, DWORD PTR _this$[ebp-4]
  307.     jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  308. __ehhandler$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z:
  309.     mov edx, DWORD PTR [esp+8]
  310.     lea eax, DWORD PTR [edx-4]
  311.     mov ecx, DWORD PTR [edx-8]
  312.     xor ecx, eax
  313.     call    @__security_check_cookie@4
  314.     mov eax, OFFSET __ehfuncinfo$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z
  315.     jmp ___CxxFrameHandler3
  316. text$x  ENDS
  317. ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry
  318. PUBLIC  __real@4067a1557d6ec409
  319. PUBLIC  ?blank@@YANNNN@Z                ; blank
  320. EXTRN   __fltused:DWORD
  321. ;   COMDAT __real@4067a1557d6ec409
  322. ; File c:\documents and settings\student.multimedia\desktop\case study\case study\main_case_study.cpp
  323. CONST   SEGMENT
  324. __real@4067a1557d6ec409 DQ 04067a1557d6ec409r   ; 189.042
  325. ; Function compile flags: /Ogtpy
  326. CONST   ENDS
  327. ;   COMDAT ?blank@@YANNNN@Z
  328. _TEXT   SEGMENT
  329. ?blank@@YANNNN@Z PROC                   ; blank, COMDAT
  330.  
  331. ; 13   :     a = (3.1415 / 1.2345) / 4 + 5;
  332. ; 14   :     b = 9.999 / a + (a * a);
  333. ; 15   :    c = a *=b;
  334. ; 16   :     return c;
  335.  
  336.     fld QWORD PTR __real@4067a1557d6ec409
  337.  
  338. ; 17   : }
  339.  
  340.     ret 0
  341. ?blank@@YANNNN@Z ENDP                   ; blank
  342. _TEXT   ENDS
  343. ;   COMDAT xdata$x
  344. ; File c:\program files\microsoft visual studio 9.0\vc\include\ios
  345. xdata$x SEGMENT
  346. __unwindtable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 0ffffffffH
  347.     DD  FLAT:__unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$2
  348.     DD  00H
  349.     DD  00H
  350.     DD  00H
  351.     DD  00H
  352.     DD  0ffffffffH
  353.     DD  FLAT:__unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$3
  354. __catchsym$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$4 DD 040H
  355.     DD  00H
  356.     DD  00H
  357.     DD  FLAT:__catch$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$0
  358. __tryblocktable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 01H
  359.     DD  01H
  360.     DD  02H
  361.     DD  01H
  362.     DD  FLAT:__catchsym$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$4
  363. __ehfuncinfo$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 019930522H
  364.     DD  04H
  365.     DD  FLAT:__unwindtable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
  366.     DD  01H
  367.     DD  FLAT:__tryblocktable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
  368.     DD  2 DUP(00H)
  369.     DD  00H
  370.     DD  01H
  371. ; Function compile flags: /Ogtpy
  372. ; File c:\program files\microsoft visual studio 9.0\vc\include\ostream
  373. xdata$x ENDS
  374. ;   COMDAT ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
  375. _TEXT   SEGMENT
  376. __Ok$ = -32                     ; size = 8
  377. $T23720 = -24                       ; size = 1
  378. $T23702 = -24                       ; size = 1
  379. __State$ = -20                      ; size = 4
  380. __$EHRec$ = -16                     ; size = 16
  381. __Ostr$ = 8                     ; size = 4
  382. __Val$ = 12                     ; size = 4
  383. ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z PROC ; std::operator<<<std::char_traits<char> >, COMDAT
  384.  
  385. ; 741  :    {   // insert NTBS into char stream
  386.  
  387.     push    ebp
  388.     mov ebp, esp
  389.     push    -1
  390.     push    __ehhandler$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
  391.     mov eax, DWORD PTR fs:0
  392.     push    eax
  393.     sub esp, 20                 ; 00000014H
  394.     push    ebx
  395.     push    esi
  396.     push    edi
  397.     mov eax, DWORD PTR ___security_cookie
  398.     xor eax, ebp
  399.     push    eax
  400.     lea eax, DWORD PTR __$EHRec$[ebp+4]
  401.     mov DWORD PTR fs:0, eax
  402.     mov DWORD PTR __$EHRec$[ebp], esp
  403.     mov esi, DWORD PTR __Ostr$[ebp]
  404.  
  405. ; 742  :    typedef char _Elem;
  406. ; 743  :    typedef basic_ostream<_Elem, _Traits> _Myos;
  407. ; 744  :    ios_base::iostate _State = ios_base::goodbit;
  408. ; 745  :    streamsize _Count = (streamsize)_Traits::length(_Val);  // may overflow
  409.  
  410.     mov eax, DWORD PTR __Val$[ebp]
  411.     xor ebx, ebx
  412.     mov DWORD PTR __State$[ebp], ebx
  413.     lea edx, DWORD PTR [eax+1]
  414.     npad    7
  415. $LL72@operator:
  416.     mov cl, BYTE PTR [eax]
  417.     inc eax
  418.     test    cl, cl
  419.     jne SHORT $LL72@operator
  420.     sub eax, edx
  421.     mov edi, eax
  422.  
  423. ; 746  :    streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
  424. ; 747  :        ? 0 : _Ostr.width() - _Count;
  425.  
  426.     mov eax, DWORD PTR [esi]
  427.     mov ecx, DWORD PTR [eax+4]
  428.     mov eax, DWORD PTR [ecx+esi+24]
  429.     cmp eax, ebx
  430.     jle SHORT $LN17@operator
  431.     cmp eax, edi
  432.     jle SHORT $LN17@operator
  433.     sub eax, edi
  434.     mov ebx, eax
  435. $LN17@operator:
  436.  
  437. ; 748  :    const typename _Myos::sentry _Ok(_Ostr);
  438.  
  439.     lea edx, DWORD PTR __Ok$[ebp]
  440.     push    edx
  441.     call    ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry
  442.     mov DWORD PTR __$EHRec$[ebp+12], 0
  443.  
  444. ; 749  :
  445. ; 750  :    if (!_Ok)
  446.  
  447.     cmp BYTE PTR __Ok$[ebp+4], 0
  448.     jne SHORT $LN14@operator
  449.  
  450. ; 751  :        _State |= ios_base::badbit;
  451.  
  452.     mov DWORD PTR __State$[ebp], 4
  453.  
  454. ; 752  :    else
  455.  
  456.     jmp SHORT $LN22@operator
  457. $LN14@operator:
  458.  
  459. ; 753  :        {   // state okay, insert
  460. ; 754  :        _TRY_IO_BEGIN
  461.  
  462.     mov BYTE PTR __$EHRec$[ebp+12], 1
  463.  
  464. ; 755  :        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
  465.  
  466.     mov eax, DWORD PTR [esi]
  467.     mov ecx, DWORD PTR [eax+4]
  468.     mov eax, DWORD PTR [ecx+esi+16]
  469.     and eax, 448                ; 000001c0H
  470.     cmp eax, 64                 ; 00000040H
  471.     je  SHORT $LN70@operator
  472. $LL10@operator:
  473.  
  474. ; 756  :            for (; 0 < _Pad; --_Pad)    // pad on left
  475.  
  476.     test    ebx, ebx
  477.     jle SHORT $LN8@operator
  478.  
  479. ; 757  :                if (_Traits::eq_int_type(_Traits::eof(),
  480. ; 758  :                    _Ostr.rdbuf()->sputc(_Ostr.fill())))
  481.  
  482.     mov edx, DWORD PTR [esi]
  483.     mov eax, DWORD PTR [edx+4]
  484.     mov cl, BYTE PTR [eax+esi+48]
  485.     add eax, esi
  486.     mov eax, DWORD PTR [eax+40]
  487.     mov BYTE PTR $T23702[ebp], cl
  488.     mov edx, DWORD PTR $T23702[ebp]
  489.     push    edx
  490.     mov ecx, eax
  491.     call    DWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z
  492.     cmp eax, -1
  493.     jne $LN9@operator
  494.  
  495. ; 759  :                    {   // insertion failed, quit
  496. ; 760  :                    _State |= ios_base::badbit;
  497.  
  498.     or  DWORD PTR __State$[ebp], 4
  499. $LN8@operator:
  500.  
  501. ; 761  :                    break;
  502. ; 762  :                    }
  503. ; 763  :
  504. ; 764  :        if (_State == ios_base::goodbit
  505. ; 765  :            && _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
  506.  
  507.     cmp DWORD PTR __State$[ebp], 0
  508.     jne SHORT $LN2@operator
  509. $LN70@operator:
  510.     mov eax, DWORD PTR [esi]
  511.     mov ecx, DWORD PTR [eax+4]
  512.     mov edx, DWORD PTR __Val$[ebp]
  513.     mov ecx, DWORD PTR [ecx+esi+40]
  514.     push    edi
  515.     push    edx
  516.     call    DWORD PTR __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z
  517.     cmp eax, edi
  518.     je  SHORT $LL71@operator
  519.  
  520. ; 766  :            _State |= ios_base::badbit;
  521.  
  522.     mov DWORD PTR __State$[ebp], 4
  523. $LN2@operator:
  524.  
  525. ; 775  :                    }
  526. ; 776  :        _Ostr.width(0);
  527.  
  528.     mov eax, DWORD PTR [esi]
  529.     mov eax, DWORD PTR [eax+4]
  530.     add eax, esi
  531.     xor ecx, ecx
  532.     mov DWORD PTR [eax+24], ecx
  533.     mov DWORD PTR __$EHRec$[ebp+12], ecx
  534. $LN22@operator:
  535.  
  536. ; 778  :        }
  537. ; 779  :
  538. ; 780  :    _Ostr.setstate(_State);
  539.  
  540.     mov ecx, DWORD PTR __State$[ebp]
  541.     mov edx, DWORD PTR [esi]
  542.     push    0
  543.     push    ecx
  544.     mov ecx, DWORD PTR [edx+4]
  545.     add ecx, esi
  546.     call    DWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z
  547.  
  548. ; 781  :    return (_Ostr);
  549.  
  550.     mov DWORD PTR __$EHRec$[ebp+12], 3
  551.     call    DWORD PTR __imp_?uncaught_exception@std@@YA_NXZ
  552.     test    al, al
  553.     jne SHORT $LN56@operator
  554.     mov ecx, DWORD PTR __Ok$[ebp]
  555.     call    DWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ
  556. $LN56@operator:
  557.     mov DWORD PTR __$EHRec$[ebp+12], -1
  558.     mov eax, DWORD PTR __Ok$[ebp]
  559.     mov ecx, DWORD PTR [eax]
  560.     mov edx, DWORD PTR [ecx+4]
  561.     mov ecx, DWORD PTR [edx+eax+40]
  562.     test    ecx, ecx
  563.     je  SHORT $LN74@operator
  564.     call    DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ
  565. $LN74@operator:
  566.     mov eax, esi
  567.  
  568. ; 782  :    }
  569.  
  570.     mov ecx, DWORD PTR __$EHRec$[ebp+4]
  571.     mov DWORD PTR fs:0, ecx
  572.     pop ecx
  573.     pop edi
  574.     pop esi
  575.     pop ebx
  576.     mov esp, ebp
  577.     pop ebp
  578.     ret 0
  579. $LN9@operator:
  580.  
  581. ; 756  :            for (; 0 < _Pad; --_Pad)    // pad on left
  582.  
  583.     dec ebx
  584.     jmp $LL10@operator
  585.     npad    4
  586. $LL71@operator:
  587.  
  588. ; 767  :
  589. ; 768  :        if (_State == ios_base::goodbit)
  590. ; 769  :            for (; 0 < _Pad; --_Pad)    // pad on right
  591.  
  592.     test    ebx, ebx
  593.     jle SHORT $LN2@operator
  594.  
  595. ; 770  :                if (_Traits::eq_int_type(_Traits::eof(),
  596. ; 771  :                    _Ostr.rdbuf()->sputc(_Ostr.fill())))
  597.  
  598.     mov eax, DWORD PTR [esi]
  599.     mov ecx, DWORD PTR [eax+4]
  600.     mov dl, BYTE PTR [ecx+esi+48]
  601.     lea eax, DWORD PTR [ecx+esi]
  602.     mov eax, DWORD PTR [eax+40]
  603.     mov BYTE PTR $T23720[ebp], dl
  604.     mov ecx, DWORD PTR $T23720[ebp]
  605.     push    ecx
  606.     mov ecx, eax
  607.     call    DWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z
  608.     cmp eax, -1
  609.     jne SHORT $LN3@operator
  610.  
  611. ; 772  :                    {   // insertion failed, quit
  612. ; 773  :                    _State |= ios_base::badbit;
  613.  
  614.     or  DWORD PTR __State$[ebp], 4
  615.  
  616. ; 774  :                    break;
  617.  
  618.     jmp $LN2@operator
  619. $LN3@operator:
  620.  
  621. ; 767  :
  622. ; 768  :        if (_State == ios_base::goodbit)
  623. ; 769  :            for (; 0 < _Pad; --_Pad)    // pad on right
  624.  
  625.     dec ebx
  626.     jmp SHORT $LL71@operator
  627. __catch$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$0:
  628.  
  629. ; 777  :        _CATCH_IO_(_Ostr)
  630.  
  631.     mov eax, DWORD PTR __Ostr$[ebp]
  632.     mov edx, DWORD PTR [eax]
  633.     mov ecx, DWORD PTR [edx+4]
  634.     push    1
  635.     push    4
  636.     add ecx, eax
  637.     call    DWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z
  638.     mov DWORD PTR __$EHRec$[ebp+12], 0
  639.     mov eax, $LN23@operator
  640.     ret 0
  641. $LN23@operator:
  642.     mov esi, DWORD PTR __Ostr$[ebp]
  643.     jmp $LN22@operator
  644. _TEXT   ENDS
  645. ;   COMDAT text$x
  646. text$SEGMENT
  647. __unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$2:
  648.     lea eax, DWORD PTR __Ok$[ebp]
  649.     push    eax
  650.     call    ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry
  651.     ret 0
  652. __unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$3:
  653.     lea eax, DWORD PTR __Ok$[ebp]
  654.     jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  655. __ehhandler$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z:
  656.     mov edx, DWORD PTR [esp+8]
  657.     lea eax, DWORD PTR [edx+12]
  658.     mov ecx, DWORD PTR [edx-36]
  659.     xor ecx, eax
  660.     call    @__security_check_cookie@4
  661.     mov eax, OFFSET __ehfuncinfo$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z
  662.     jmp ___CxxFrameHandler3
  663. text$x  ENDS
  664. ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ENDP ; std::operator<<<std::char_traits<char> >
  665. PUBLIC  _main
  666. ; Function compile flags: /Ogtpy
  667. ; File c:\documents and settings\student.multimedia\desktop\case study\case study\main_case_study.cpp
  668. ;   COMDAT _main
  669. _TEXT   SEGMENT
  670. _main   PROC                        ; COMDAT
  671.  
  672. ; 29   : int main(){
  673.  
  674.     push    ebp
  675.     mov ebp, esp
  676.     and esp, -8                 ; fffffff8H
  677.     push    esi
  678.  
  679. ; 30   :     const unsigned int maxUINT = -1;
  680. ; 31   :     clock_t start = clock();
  681.  
  682.     mov esi, DWORD PTR __imp__clock
  683.     push    edi
  684.     call    esi
  685.     mov edi, eax
  686.  
  687. ; 32   :    
  688. ; 33   :     //============================ NON-INLINE TEST ===============================//
  689. ; 34   :     for(unsigned int i = 0; i < maxUINT; ++i)
  690. ; 35   :         blank(1.1,2.2,3.3);
  691. ; 36   :    
  692. ; 37   :     clock_t end = clock();
  693.  
  694.     call    esi
  695.  
  696. ; 38   :     std::cout << maxUINT << " calls to non inline function took "
  697. ; 39   :               << (end - start)/CLOCKS_PER_SEC << " seconds.\n";
  698.  
  699.     sub eax, edi
  700.     mov ecx, eax
  701.     mov eax, 274877907              ; 10624dd3H
  702.     imul    ecx
  703.     mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  704.     sar edx, 6
  705.     mov eax, edx
  706.     push    OFFSET ??_C@_0L@NFAOJDFF@?5seconds?4?6?$AA@
  707.     shr eax, 31                 ; 0000001fH
  708.     add eax, edx
  709.     push    eax
  710.     push    OFFSET ??_C@_0CE@KABODEEL@?5calls?5to?5non?5inline?5function?5to@
  711.     push    -1
  712.     call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z
  713.     push    eax
  714.     call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
  715.     add esp, 8
  716.     mov ecx, eax
  717.     call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z
  718.     push    eax
  719.     call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
  720.     add esp, 8
  721.  
  722. ; 40   :    
  723. ; 41   :     start = clock();
  724.  
  725.     call    esi
  726.     mov edi, eax
  727.  
  728. ; 42   :    
  729. ; 43   :     //============================ INLINE TEST ===================================//
  730. ; 44   :     for(unsigned int i = 0; i < maxUINT; ++i)
  731. ; 45   :         blank(1.1,2.2,3.3);
  732. ; 46   :    
  733. ; 47   :     end = clock();
  734.  
  735.     call    esi
  736.  
  737. ; 48   :     std::cout << maxUINT << " calls to inline function took "
  738. ; 49   :               << (end - start)/CLOCKS_PER_SEC << " seconds.\n";
  739.  
  740.     sub eax, edi
  741.     mov ecx, eax
  742.     mov eax, 274877907              ; 10624dd3H
  743.     imul    ecx
  744.     sar edx, 6
  745.     mov ecx, edx
  746.     shr ecx, 31                 ; 0000001fH
  747.     push    OFFSET ??_C@_0L@NFAOJDFF@?5seconds?4?6?$AA@
  748.     add ecx, edx
  749.     push    ecx
  750.     mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  751.     push    OFFSET ??_C@_0CA@OLIKOKKF@?5calls?5to?5inline?5function?5took?5?$AA@
  752.     push    -1
  753.     call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z
  754.     push    eax
  755.     call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
  756.     add esp, 8
  757.     mov ecx, eax
  758.     call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z
  759.     push    eax
  760.     call    ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char> >
  761.     add esp, 8
  762.  
  763. ; 50   :    
  764. ; 51   :     getchar(); // Wait for input.
  765.  
  766.     call    DWORD PTR __imp__getchar
  767.  
  768. ; 52   :     return 0;
  769. ; 53   : } // Main.
  770.  
  771.     pop edi
  772.     xor eax, eax
  773.     pop esi
  774.     mov esp, ebp
  775.     pop ebp
  776.     ret 0
  777. _main   ENDP
  778. _TEXT   ENDS
  779. END
RAW Paste Data