常用排序算法

冒泡排序

 1 // ConsoleApplication15.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include"stdlib.h"
 6 
 7 #include"iostream"
 8 using namespace std;
 9 
10 int _tmain(int argc, _TCHAR* argv[])
11 {
12     int a[10];
13     for (int i = 0; i < 10; i++)
14     {
15         a[i] = rand();
16         cout << a[i] << endl;
17     }
18     cout << "**********" << endl;
19 
20     for (int i = 0; i < 10; i++)
21     {
22         for (int j = 0; j < 9 - i; j++)
23         {
24             if (a[j]>a[j + 1])
25             {
26                 int temp;
27                 temp = a[j];
28                 a[j] = a[j + 1];
29                 a[j + 1] = temp;
30             }
31         }
32     }
33 
34     for (int i = 0; i < 10; i++)
35         cout << a[i] << endl;
36     return 0;
37 }

vs2013生成的反汇编代码:

#include "stdafx.h"
#include"stdlib.h"

#include"iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
01025E80  push        ebp  
01025E81  mov         ebp,esp  
01025E83  sub         esp,12Ch  
01025E89  push        ebx  
01025E8A  push        esi  
01025E8B  push        edi  
01025E8C  lea         edi,[ebp-12Ch]  
01025E92  mov         ecx,4Bh  
01025E97  mov         eax,0CCCCCCCCh  
01025E9C  rep stos    dword ptr es:[edi]  
    int a[10];
    for (int i = 0; i < 10; i++)
01025E9E  mov         dword ptr [ebp-38h],0  
01025EA5  jmp         wmain+30h (01025EB0h)  
01025EA7  mov         eax,dword ptr [ebp-38h]  
01025EAA  add         eax,1  
01025EAD  mov         dword ptr [ebp-38h],eax  
01025EB0  cmp         dword ptr [ebp-38h],0Ah  
01025EB4  jge         wmain+81h (01025F01h)  
    {
        a[i] = rand();
01025EB6  mov         esi,esp  
01025EB8  call        dword ptr ds:[10311D0h]  
01025EBE  cmp         esi,esp  
01025EC0  call        __RTC_CheckEsp (0102133Eh)  
01025EC5  mov         ecx,dword ptr [ebp-38h]  
01025EC8  mov         dword ptr a[ecx*4],eax  
        cout << a[i] << endl;
01025ECC  mov         esi,esp  
01025ECE  push        10213E8h  
01025ED3  mov         edi,esp  
01025ED5  mov         eax,dword ptr [ebp-38h]  
01025ED8  mov         ecx,dword ptr a[eax*4]  
01025EDC  push        ecx  
01025EDD  mov         ecx,dword ptr ds:[10310A0h]  
01025EE3  call        dword ptr ds:[1031094h]  
01025EE9  cmp         edi,esp  
01025EEB  call        __RTC_CheckEsp (0102133Eh)  
01025EF0  mov         ecx,eax  
01025EF2  call        dword ptr ds:[1031090h]  
01025EF8  cmp         esi,esp  
01025EFA  call        __RTC_CheckEsp (0102133Eh)  
    }
01025EFF  jmp         wmain+27h (01025EA7h)  
    cout << "**********" << endl;
01025F01  mov         esi,esp  
01025F03  push        10213E8h  
01025F08  push        102DC70h  
01025F0D  mov         eax,dword ptr ds:[010310A0h]  
01025F12  push        eax  
01025F13  call        std::operator<<<std::char_traits<char> > (010212B2h)  
01025F18  add         esp,8  
01025F1B  mov         ecx,eax  
01025F1D  call        dword ptr ds:[1031090h]  
01025F23  cmp         esi,esp  
01025F25  call        __RTC_CheckEsp (0102133Eh)  

    for (int i = 0; i < 10; i++)
01025F2A  mov         dword ptr [ebp-44h],0  
01025F31  jmp         wmain+0BCh (01025F3Ch)  
01025F33  mov         eax,dword ptr [ebp-44h]  
01025F36  add         eax,1  
01025F39  mov         dword ptr [ebp-44h],eax  
01025F3C  cmp         dword ptr [ebp-44h],0Ah  
01025F40  jge         wmain+117h (01025F97h)  
    {
        for (int j = 0; j < 9 - i; j++)
01025F42  mov         dword ptr [ebp-50h],0  
01025F49  jmp         wmain+0D4h (01025F54h)  
01025F4B  mov         eax,dword ptr [ebp-50h]  
01025F4E  add         eax,1  
01025F51  mov         dword ptr [ebp-50h],eax  
01025F54  mov         eax,9  
01025F59  sub         eax,dword ptr [ebp-44h]  
01025F5C  cmp         dword ptr [ebp-50h],eax  
01025F5F  jge         wmain+115h (01025F95h)  
        {
            if (a[j]>a[j + 1])
01025F61  mov         eax,dword ptr [ebp-50h]  
01025F64  mov         ecx,dword ptr [ebp-50h]  
01025F67  mov         edx,dword ptr a[eax*4]  
01025F6B  cmp         edx,dword ptr [ebp+ecx*4-28h]  
01025F6F  jle         wmain+113h (01025F93h)  
            {
                int temp;
                temp = a[j];
01025F71  mov         eax,dword ptr [ebp-50h]  
01025F74  mov         ecx,dword ptr a[eax*4]  
01025F78  mov         dword ptr [ebp-5Ch],ecx  
                a[j] = a[j + 1];
01025F7B  mov         eax,dword ptr [ebp-50h]  
01025F7E  mov         ecx,dword ptr [ebp-50h]  
01025F81  mov         edx,dword ptr [ebp+ecx*4-28h]  
01025F85  mov         dword ptr a[eax*4],edx  
                a[j + 1] = temp;
01025F89  mov         eax,dword ptr [ebp-50h]  
01025F8C  mov         ecx,dword ptr [ebp-5Ch]  
01025F8F  mov         dword ptr [ebp+eax*4-28h],ecx  
            }
        }
01025F93  jmp         wmain+0CBh (01025F4Bh)  
    }
01025F95  jmp         wmain+0B3h (01025F33h)  

    for (int i = 0; i < 10; i++)
01025F97  mov         dword ptr [ebp-68h],0  
01025F9E  jmp         wmain+129h (01025FA9h)  
01025FA0  mov         eax,dword ptr [ebp-68h]  
01025FA3  add         eax,1  
01025FA6  mov         dword ptr [ebp-68h],eax  
01025FA9  cmp         dword ptr [ebp-68h],0Ah  
01025FAD  jge         wmain+164h (01025FE4h)  
        cout << a[i] << endl;
01025FAF  mov         esi,esp  
01025FB1  push        10213E8h  
01025FB6  mov         edi,esp  
01025FB8  mov         eax,dword ptr [ebp-68h]  
01025FBB  mov         ecx,dword ptr a[eax*4]  
01025FBF  push        ecx  
01025FC0  mov         ecx,dword ptr ds:[10310A0h]  
01025FC6  call        dword ptr ds:[1031094h]  
01025FCC  cmp         edi,esp  
01025FCE  call        __RTC_CheckEsp (0102133Eh)  
01025FD3  mov         ecx,eax  
01025FD5  call        dword ptr ds:[1031090h]  
01025FDB  cmp         esi,esp  
01025FDD  call        __RTC_CheckEsp (0102133Eh)  
01025FE2  jmp         wmain+120h (01025FA0h)  
    return 0;
01025FE4  xor         eax,eax  
}
01025FE6  push        edx  
01025FE7  mov         ecx,ebp  
01025FE9  push        eax  
01025FEA  lea         edx,ds:[102600Ch]  
01025FF0  call        @_RTC_CheckStackVars@8 (01021131h)  
01025FF5  pop         eax  
01025FF6  pop         edx  
01025FF7  pop         edi  
01025FF8  pop         esi  
01025FF9  pop         ebx  
01025FFA  add         esp,12Ch  
01026000  cmp         ebp,esp  
01026002  call        __RTC_CheckEsp (0102133Eh)  
01026007  mov         esp,ebp  
01026009  pop         ebp  
0102600A  ret  
0102600B  nop  
0102600C  add         dword ptr [eax],eax  
0102600E  add         byte ptr [eax],al  
01026010  adc         al,60h  
01026012  add         al,byte ptr [ecx]  
01026014  aamb        0FFh  
01026016  ?? ?? 
01026017  jmp         fword ptr [eax]  
01026019  add         byte ptr [eax],al  
0102601B  add         byte ptr [eax],ah  
0102601D  pushad  
0102601E  add         al,byte ptr [ecx]  
01026020  popad  
01026021  add         ah,cl  
posted @ 2019-12-03 23:09  Butcher512  阅读(121)  评论(0)    收藏  举报