[C++]对照代码学习反汇编

程序代码:

 1 #include <iostream>
 2 
 3 int main()
 4 {
 5     int i, j, k;
 6     int result = 0;
 7     for(i = 1; i <= 4; i++)
 8         for(j = 1; j <= 4; j++)
 9             for(k = 1; k <= 4; k++)
10             {
11                 if(i != k && i != j && j != k)
12                 {
13                     std::cout << i << j << k;
14                     result++;
15                     if(result % 4 == 0)
16                         std::cout << std::endl;
17                     else
18                         std::cout << "\t";
19                 }
20             }
21     
22     std::cout << std::endl << "能组成 " << result << " 个无重复数字的三位数。";
23     std::cout << std::endl;
24     return 0;
25 }

编译后反汇编

 1 00401500  /$  8D4C24 04     lea     ecx, dword ptr [esp+4]
 2 00401504  |.  83E4 F0       and     esp, FFFFFFF0
 3 00401507  |.  FF71 FC       push    dword ptr [ecx-4]
 4 0040150A  |.  55            push    ebp
 5 0040150B  |.  89E5          mov     ebp, esp
 6 0040150D  |.  51            push    ecx
 7 0040150E  |.  83EC 24       sub     esp, 24
 8 00401511  |.  E8 1AC10000   call    0040D630                         ;  int main()
 9 00401516  |.  C745 E8 00000>mov     dword ptr [ebp-18], 0            ;  int result = 0;
10 0040151D  |.  C745 F4 01000>mov     dword ptr [ebp-C], 1             ;  int i = 1;
11 00401524  |.  E9 BF000000   jmp     004015E8                         ;  for(i = 1; i <= 4; i++)
12 00401529  |>  C745 F0 01000>/mov     dword ptr [ebp-10], 1           ;  int j = 1;
13 00401530  |.  E9 A5000000   |jmp     004015DA                        ;  for(j = 1; j <= 4; j++)
14 00401535  |>  C745 EC 01000>|/mov     dword ptr [ebp-14], 1          ;  int k = 1;
15 0040153C  |.  E9 8B000000   ||jmp     004015CC                       ;  for(k = 1; k <= 4; k++)
16 00401541  |>  8B45 F4       ||/mov     eax, dword ptr [ebp-C]        ;  eax = i;
17 00401544  |.  3B45 EC       |||cmp     eax, dword ptr [ebp-14]       ;  if(i != k)
18 00401547  |.  74 7F         |||je      short 004015C8
19 00401549  |.  8B45 F4       |||mov     eax, dword ptr [ebp-C]        ;  eax = i;
20 0040154C  |.  3B45 F0       |||cmp     eax, dword ptr [ebp-10]       ;  if(i != j)
21 0040154F  |.  74 77         |||je      short 004015C8
22 00401551  |.  8B45 F0       |||mov     eax, dword ptr [ebp-10]       ;  eax = i;
23 00401554  |.  3B45 EC       |||cmp     eax, dword ptr [ebp-14]       ;  if(j != k)
24 00401557  |.  74 6F         |||je      short 004015C8
25 00401559  |.  8B45 F4       |||mov     eax, dword ptr [ebp-C]        ;  eax = i;
26 0040155C  |.  890424        |||mov     dword ptr [esp], eax          ;
27 0040155F  |.  B9 40714800   |||mov     ecx, 00487140
28 00401564  |.  E8 67020500   |||call    004517D0                      ;  cout << i;
29 00401569  |.  83EC 04       |||sub     esp, 4
30 0040156C  |.  89C2          |||mov     edx, eax
31 0040156E  |.  8B45 F0       |||mov     eax, dword ptr [ebp-10]       ;  eax = j;
32 00401571  |.  890424        |||mov     dword ptr [esp], eax          ;
33 00401574  |.  89D1          |||mov     ecx, edx
34 00401576  |.  E8 55020500   |||call    004517D0                      ;  cout << j;
35 0040157B  |.  83EC 04       |||sub     esp, 4
36 0040157E  |.  89C2          |||mov     edx, eax
37 00401580  |.  8B45 EC       |||mov     eax, dword ptr [ebp-14]       ;  eax = k;
38 00401583  |.  890424        |||mov     dword ptr [esp], eax          ;
39 00401586  |.  89D1          |||mov     ecx, edx
40 00401588  |.  E8 43020500   |||call    004517D0                      ;  cout << k;
41 0040158D  |.  83EC 04       |||sub     esp, 4
42 00401590  |.  8345 E8 01    |||add     dword ptr [ebp-18], 1         ;  result++;
43 00401594  |.  8B45 E8       |||mov     eax, dword ptr [ebp-18]
44 00401597  |.  83E0 03       |||and     eax, 3                        ;  result % 4;
45 0040159A  |.  85C0          |||test    eax, eax                      ;  if(result % 4 == 0)
46 0040159C  |.  75 16         |||jnz     short 004015B4
47 0040159E  |.  C70424 E09447>|||mov     dword ptr [esp], 004794E0
48 004015A5  |.  B9 40714800   |||mov     ecx, 00487140
49 004015AA  |.  E8 71FF0400   |||call    00451520                      ;  cout << endl;
50 004015AF  |.  83EC 04       |||sub     esp, 4
51 004015B2  |.  EB 14         |||jmp     short 004015C8
52 004015B4  |>  C74424 04 008>|||mov     dword ptr [esp+4], 00488000
53 004015BC  |.  C70424 407148>|||mov     dword ptr [esp], 00487140
54 004015C3  |.  E8 089E0700   |||call    0047B3D0                      ;  cout << "\t";
55 004015C8  |>  8345 EC 01    |||add     dword ptr [ebp-14], 1         ;  k++;
56 004015CC  |>  837D EC 04    || cmp     dword ptr [ebp-14], 4         ;  k <= 4;
57 004015D0  |.^ 0F8E 6BFFFFFF ||\jle     00401541
58 004015D6  |.  8345 F0 01    ||add     dword ptr [ebp-10], 1          ;  j++;
59 004015DA  |>  837D F0 04    | cmp     dword ptr [ebp-10], 4          ;  j <= 4;
60 004015DE  |.^ 0F8E 51FFFFFF |\jle     00401535
61 004015E4  |.  8345 F4 01    |add     dword ptr [ebp-C], 1            ;  i++;
62 004015E8  |>  837D F4 04     cmp     dword ptr [ebp-C], 4            ;  i <= 4;
63 004015EC  |.^ 0F8E 37FFFFFF \jle     00401529
64 004015F2  |.  C70424 E09447>mov     dword ptr [esp], 004794E0
65 004015F9  |.  B9 40714800   mov     ecx, 00487140
66 004015FE  |.  E8 1DFF0400   call    00451520                         ;  cout << endl;
67 00401603  |.  83EC 04       sub     esp, 4
68 00401606  |.  C74424 04 028>mov     dword ptr [esp+4], 00488002
69 0040160E  |.  890424        mov     dword ptr [esp], eax
70 00401611  |.  E8 BA9D0700   call    0047B3D0                         ;  cout << "能组成 ";
71 00401616  |.  89C2          mov     edx, eax
72 00401618  |.  8B45 E8       mov     eax, dword ptr [ebp-18]          ;  eax = result;
73 0040161B  |.  890424        mov     dword ptr [esp], eax
74 0040161E  |.  89D1          mov     ecx, edx
75 00401620  |.  E8 AB010500   call    004517D0                         ;  cout << result;
76 00401625  |.  83EC 04       sub     esp, 4
77 00401628  |.  C74424 04 0A8>mov     dword ptr [esp+4], 0048800A
78 00401630  |.  890424        mov     dword ptr [esp], eax
79 00401633  |.  E8 989D0700   call    0047B3D0                         ;  cout << " 个无重复数字的三位数。";
80 00401638  |.  C70424 E09447>mov     dword ptr [esp], 004794E0
81 0040163F  |.  B9 40714800   mov     ecx, 00487140
82 00401644  |.  E8 D7FE0400   call    00451520                         ;  cout << endl;
83 00401649  |.  83EC 04       sub     esp, 4
84 0040164C  |.  B8 00000000   mov     eax, 0
85 00401651  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
86 00401654  |.  C9            leave
87 00401655  |.  8D61 FC       lea     esp, dword ptr [ecx-4]
88 00401658  \.  C3            retn

 

posted @ 2022-11-11 14:54  hoy0a1d  阅读(69)  评论(0编辑  收藏  举报