// chapter1.4.4.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"#include <iostream>
int _tmain(int argc, _TCHAR* argv[]){ int sum = 0, value; while(std::cin>>value) { sum+=value; } std::cout<<"Sum is " <<sum<<std::endl; return 0;}
debug
od
004114C0 55 push ebp004114C1 8BEC mov ebp, esp004114C3 81EC E4000000 sub esp, 0E4004114C9 53 push ebx004114CA 56 push esi004114CB 57 push edi004114CC 8DBD 1CFFFFFF lea edi, dword ptr [ebp-E4]004114D2 B9 39000000 mov ecx, 39004114D7 B8 CCCCCCCC mov eax, CCCCCCCC004114DC F3:AB rep stos dword ptr es:[edi]004114DE C745 F8 0000000>mov dword ptr [ebp-8], 0004114E5 8BF4 mov esi, esp004114E7 8D45 EC lea eax, dword ptr [ebp-14]004114EA 50 push eax004114EB 8B0D 24A34100 mov ecx, dword ptr [<&MSVCP90D.std::>; MSVCP90D.std::cin004114F1 FF15 20A34100 call dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_istream<char,std::char_traits<char> >::operator>>004114F7 3BF4 cmp esi, esp004114F9 E8 BAFCFFFF call 004111B8004114FE 8985 20FFFFFF mov dword ptr [ebp-E0], eax00411504 8B8D 20FFFFFF mov ecx, dword ptr [ebp-E0]0041150A 8B11 mov edx, dword ptr [ecx]0041150C 8B8D 20FFFFFF mov ecx, dword ptr [ebp-E0]00411512 034A 04 add ecx, dword ptr [edx+4]00411515 8BF4 mov esi, esp00411517 FF15 1CA34100 call dword ptr [<&MSVCP90D.std::ios_b>; MSVCP90D.std::ios_base::operator void *0041151D 3BF4 cmp esi, esp0041151F E8 94FCFFFF call 004111B800411524 85C0 test eax, eax ; 输入是否结束00411526 74 0B je short 0041153300411528 8B45 F8 mov eax, dword ptr [ebp-8] ; sum0041152B 0345 EC add eax, dword ptr [ebp-14] ; sum+=value0041152E 8945 F8 mov dword ptr [ebp-8], eax00411531 ^ EB B2 jmp short 004114E500411533 8BF4 mov esi, esp00411535 A1 18A34100 mov eax, dword ptr [<&MSVCP90D.std::>0041153A 50 push eax0041153B 8BFC mov edi, esp0041153D 8B4D F8 mov ecx, dword ptr [ebp-8]00411540 51 push ecx00411541 68 00784100 push 00417800 ; ASCII "Sum is "00411546 8B15 14A34100 mov edx, dword ptr [<&MSVCP90D.std::>; MSVCP90D.std::cout0041154C 52 push edx0041154D E8 11FCFFFF call 0041116300411552 83C4 08 add esp, 800411555 8BC8 mov ecx, eax00411557 FF15 10A34100 call dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_ostream<char,std::char_traits<char> >::operator<<0041155D 3BFC cmp edi, esp0041155F E8 54FCFFFF call 004111B800411564 8BC8 mov ecx, eax00411566 FF15 0CA34100 call dword ptr [<&MSVCP90D.std::basic>; MSVCP90D.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >::operator<<0041156C 3BF4 cmp esi, esp0041156E E8 45FCFFFF call 004111B800411573 33C0 xor eax, eax00411575 52 push edx00411576 8BCD mov ecx, ebp00411578 50 push eax00411579 8D15 9C154100 lea edx, dword ptr [41159C]0041157F E8 2BFBFFFF call 004110AF00411584 58 pop eax00411585 5A pop edx00411586 5F pop edi00411587 5E pop esi00411588 5B pop ebx00411589 81C4 E4000000 add esp, 0E40041158F 3BEC cmp ebp, esp00411591 E8 22FCFFFF call 004111B800411596 8BE5 mov esp, ebp00411598 5D pop ebp00411599 C3 retn
ida
.text:004114C0.text:004114C0 ; =============== S U B R O U T I N E =======================================.text:004114C0.text:004114C0 ; Attributes: bp-based frame.text:004114C0.text:004114C0 _wmain proc near ; CODE XREF: j__wmainj.text:004114C0.text:004114C0 var_E4 = byte ptr -0E4h.text:004114C0 cin = dword ptr -0E0h.text:004114C0 value = dword ptr -14h.text:004114C0 sum = dword ptr -8.text:004114C0.text:004114C0 push ebp.text:004114C1 mov ebp, esp.text:004114C3 sub esp, 0E4h.text:004114C9 push ebx.text:004114CA push esi.text:004114CB push edi.text:004114CC lea edi, [ebp+var_E4].text:004114D2 mov ecx, 39h.text:004114D7 mov eax, 0CCCCCCCCh.text:004114DC rep stosd.text:004114DE mov [ebp+sum], 0.text:004114E5.text:004114E5 loc_4114E5: ; CODE XREF: _wmain+71j.text:004114E5 mov esi, esp.text:004114E7 lea eax, [ebp+value].text:004114EA push eax.text:004114EB mov ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:004114F1 call ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:004114F7 cmp esi, esp.text:004114F9 call j___RTC_CheckEsp.text:004114FE mov [ebp+cin], eax.text:00411504 mov ecx, [ebp+cin].text:0041150A mov edx, [ecx].text:0041150C mov ecx, [ebp+cin].text:00411512 add ecx, [edx+4].text:00411515 mov esi, esp.text:00411517 call ds:__imp_??Bios_base@std@@QBEPAXXZ ; std::ios_base::operator void *(void).text:0041151D cmp esi, esp.text:0041151F call j___RTC_CheckEsp.text:00411524 test eax, eax.text:00411526 jz short loc_411533.text:00411528 mov eax, [ebp+sum].text:0041152B add eax, [ebp+value].text:0041152E mov [ebp+sum], eax.text:00411531 jmp short loc_4114E5.text:00411533 ; ---------------------------------------------------------------------------.text:00411533.text:00411533 loc_411533: ; CODE XREF: _wmain+66j.text:00411533 mov esi, esp.text:00411535 mov eax, ds:__imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl(std::basic_ostream<char,std::char_traits<char>> &).text:0041153A push eax.text:0041153B mov edi, esp.text:0041153D mov ecx, [ebp+sum].text:00411540 push ecx.text:00411541 push offset aSumIs ; "Sum is ".text:00411546 mov edx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout.text:0041154C push edx.text:0041154D call j_??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char const *).text:00411552 add esp, 8.text:00411555 mov ecx, eax.text:00411557 call ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int).text:0041155D cmp edi, esp.text:0041155F call j___RTC_CheckEsp.text:00411564 mov ecx, eax.text:00411566 call ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &)).text:0041156C cmp esi, esp.text:0041156E call j___RTC_CheckEsp.text:00411573 xor eax, eax.text:00411575 push edx.text:00411576 mov ecx, ebp.text:00411578 push eax.text:00411579 lea edx, dword_41159C.text:0041157F call j_@_RTC_CheckStackVars@8 ; _RTC_CheckStackVars(x,x).text:00411584 pop eax.text:00411585 pop edx.text:00411586 pop edi.text:00411587 pop esi.text:00411588 pop ebx.text:00411589 add esp, 0E4h.text:0041158F cmp ebp, esp.text:00411591 call j___RTC_CheckEsp.text:00411596 mov esp, ebp.text:00411598 pop ebp.text:00411599 retn.text:00411599 _wmain endp.text:00411599.text:00411599 ; ---------------------------------------------------------------------------
release
od
00401000 /$ 51 push ecx00401001 |. 8B0D 40204000 mov ecx, dword ptr [<&MSVCP90.std::c>; MSVCP90.std::cin00401007 |. 56 push esi00401008 |. 8D4424 04 lea eax, dword ptr [esp+4]0040100C |. 50 push eax0040100D |. 33F6 xor esi, esi0040100F |. FF15 5C204000 call dword ptr [<&MSVCP90.std::basic_>; MSVCP90.std::basic_istream<char,std::char_traits<char> >::operator>>00401015 |. 8B08 mov ecx, dword ptr [eax]00401017 |. 8B49 04 mov ecx, dword ptr [ecx+4]0040101A |. 8B5401 08 mov edx, dword ptr [ecx+eax+8]0040101E |. 03C8 add ecx, eax00401020 |. 80E2 06 and dl, 600401023 |. 0FBEC2 movsx eax, dl00401026 |. F7D8 neg eax00401028 |. 1BC0 sbb eax, eax0040102A |. F7D0 not eax0040102C |. 85C1 test ecx, eax0040102E |. 74 2E je short 0040105E00401030 |> 037424 04 /add esi, dword ptr [esp+4] ; sum+=value00401034 |. 8D4C24 04 |lea ecx, dword ptr [esp+4]00401038 |. 51 |push ecx ; value00401039 |. 8B0D 40204000 |mov ecx, dword ptr [<&MSVCP90.std::>; MSVCP90.std::cin0040103F |. FF15 5C204000 |call dword ptr [<&MSVCP90.std::basic>; MSVCP90.std::basic_istream<char,std::char_traits<char> >::operator>>00401045 |. 8B10 |mov edx, dword ptr [eax]00401047 |. 8B4A 04 |mov ecx, dword ptr [edx+4]0040104A |. 03C8 |add ecx, eax0040104C |. 8B41 08 |mov eax, dword ptr [ecx+8]0040104F |. 24 06 |and al, 600401051 |. 0FBED0 |movsx edx, al00401054 |. F7DA |neg edx00401056 |. 1BD2 |sbb edx, edx00401058 |. F7D2 |not edx0040105A |. 85D1 |test ecx, edx ; 是否是结束0040105C |.^ 75 D2 \jnz short 004010300040105E |> A1 38204000 mov eax, dword ptr [<&MSVCP90.std::e>00401063 |. 8B0D 44204000 mov ecx, dword ptr [<&MSVCP90.std::c>; MSVCP90.std::cout00401069 |. 50 push eax0040106A |. 56 push esi ; sum0040106B |. 51 push ecx0040106C |. E8 4F010000 call 004011C000401071 |. 83C4 04 add esp, 400401074 |. 8BC8 mov ecx, eax00401076 |. FF15 64204000 call dword ptr [<&MSVCP90.std::basic_>; MSVCP90.std::basic_ostream<char,std::char_traits<char> >::operator<<0040107C |. 8BC8 mov ecx, eax0040107E |. FF15 68204000 call dword ptr [<&MSVCP90.std::basic_>; MSVCP90.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >::operator<<00401084 |. 33C0 xor eax, eax00401086 |. 5E pop esi00401087 |. 59 pop ecx00401088 \. C3 retn
ida
.text:00401000.text:00401000 ; =============== S U B R O U T I N E =======================================.text:00401000.text:00401000.text:00401000 ; int __cdecl main(int temvalue, const char **argv, const char *envp).text:00401000 _main proc near ; CODE XREF: ___tmainCRTStartup+10Ap.text:00401000.text:00401000 value = byte ptr -4.text:00401000 temvalue = dword ptr 4.text:00401000 argv = dword ptr 8.text:00401000 envp = dword ptr 0Ch.text:00401000.text:00401000 push ecx.text:00401001 mov ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:00401007 push esi.text:00401008 lea eax, [esp+8+value].text:0040100C push eax.text:0040100D xor esi, esi.text:0040100F call ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:00401015 mov ecx, [eax].text:00401017 mov ecx, [ecx+4].text:0040101A mov edx, [ecx+eax+8].text:0040101E add ecx, eax.text:00401020 and dl, 6.text:00401023 movsx eax, dl.text:00401026 neg eax.text:00401028 sbb eax, eax.text:0040102A not eax.text:0040102C test eax, ecx ; 是否是结束.text:0040102E jz short printresult.text:00401030.text:00401030 whilecin: ; CODE XREF: _main+5Cj.text:00401030 add esi, [esp+temvalue] ; esi为sum.text:00401034 lea ecx, [esp+temvalue] ; temvalue.text:00401038 push ecx.text:00401039 mov ecx, ds:__imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::basic_istream<char,std::char_traits<char>> std::cin.text:0040103F call ds:__imp_??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z ; std::basic_istream<char,std::char_traits<char>>::operator>>(int &).text:00401045 mov edx, [eax].text:00401047 mov ecx, [edx+4].text:0040104A add ecx, eax.text:0040104C mov eax, [ecx+8].text:0040104F and al, 6.text:00401051 movsx edx, al.text:00401054 neg edx.text:00401056 sbb edx, edx.text:00401058 not edx.text:0040105A test edx, ecx ; 是否结束.text:0040105C jnz short whilecin ; esi为sum.text:0040105E.text:0040105E printresult: ; CODE XREF: _main+2Ej.text:0040105E mov eax, ds:__imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::endl(std::basic_ostream<char,std::char_traits<char>> &).text:00401063 mov ecx, ds:__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::basic_ostream<char,std::char_traits<char>> std::cout.text:00401069 push eax.text:0040106A push esi ; sum.text:0040106B push ecx.text:0040106C 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>>(std::basic_ostream<char,std::char_traits<char>> &,char const *).text:00401071 add esp, 4.text:00401074 mov ecx, eax.text:00401076 call ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(int).text:0040107C mov ecx, eax.text:0040107E call ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &)).text:00401084 xor eax, eax.text:00401086 pop esi.text:00401087 pop ecx.text:00401088 retn.text:00401088 _main endp.text:00401088.text:00401088 ; ---------------------------------------------------------------------------
转载于:https://www.cnblogs.com/nanshouyong326/archive/2010/06/20/1761420.html
