- UID
- 32375
注册时间2007-6-1
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
我的第一个C++程序
第一种方法,主要是函数不同,以及调用方式的不同- //C++版冒泡排序程序
- #include<iOStream>
- using namespace std;
- void swap(int &a,int &b)
- {
- int tem = a;
- a = b;
- b = tem;
- }
- void main()
- {
- int i,j,arr[10];
- for(i=0;i<10;i++)
- {
- cout<<"请输入10个整数:";
- cin>>arr[i];
- }
- for(i=0;i<10;i++) //数组数据的循环比较
- { for(j=0;j<10-i-1;j++) //每一轮的比较
- { if(arr[j]<arr[j+1]) //比较相邻两个数大小
- { swap(arr[j],arr[j+1]); //互换函数的调用
-
- }
- }
- }
- for(i=0;i<10;i++)
- { cout<<"正确的从大到小的排序:"<<arr[i]<<endl;
- }
- }
复制代码 SWAP函数第二种实现及调用方法:- void swap(int *a, int *b)
- {int tem = *a;
- *a = *b
- *b = tem;
- }
- 调用时是:swap(&arr[j],&arr[j+1])
复制代码 下面是对我这个程序的反汇编代码- 0041E450 push ebp ;从这里开始就是main()函数的开始
- 0041E451 mov ebp, esp
- 0041E453 sub esp, 108
- 0041E459 push ebx
- 0041E45A push esi
- 0041E45B push edi
- 0041E45C lea edi, dword ptr [ebp-108]
- 0041E462 mov ecx, 42
- 0041E467 mov eax, CCCCCCCC
- 0041E46C rep stos dword ptr es:[edi]
- 0041E46E mov dword ptr [ebp-8], 0
- 0041E475 jmp short 0041E480
- 0041E477 mov eax, dword ptr [ebp-8] ;eax就相当与i ,从这里开始循环
- 0041E47A add eax, 1 ;i++
- 0041E47D mov dword ptr [ebp-8], eax ;把i保存了
- 0041E480 [color=Red]cmp dword ptr [ebp-8], 0A[/color] ;i与10比较
- 0041E484 jge short 0041E4AC ;i大于10就跳
- 0041E486 push 004570E4 ; 请输入10个整数:
- 0041E48B push 004607D0
- 0041E490 call 0041CB6D ;显示“请输入10个整数:”
- 0041E495 add esp, 8
- 0041E498 mov eax, dword ptr [ebp-8]
- 0041E49B lea ecx, dword ptr [ebp+eax*4-44]
- 0041E49F push ecx
- 0041E4A0 mov ecx, 00460710
- 0041E4A5 call 0041CAAA ;执行输入命令,相当与C++中的 cin<<arr[i]
- 0041E4AA jmp short 0041E477 ;跳回去循环
- 0041E4AC mov dword ptr [ebp-8], 0 ;对i进行初始化
- 0041E4B3 jmp short 0041E4BE
- 0041E4B5 mov eax, dword ptr [ebp-8]
- 0041E4B8 add eax, 1 ;i++
- 0041E4BB mov dword ptr [ebp-8], eax
- 0041E4BE cmp dword ptr [ebp-8], 0A ;i与10比较
- 0041E4C2 jge short 0041E512 ;大于就跳
- 0041E4C4 mov dword ptr [ebp-14], 0 ;相当与对j初始化,j=0
- 0041E4CB jmp short 0041E4D6
- 0041E4CD mov eax, dword ptr [ebp-14]
- 0041E4D0 add eax, 1 ;j++
- 0041E4D3 mov dword ptr [ebp-14], eax
- 0041E4D6 mov eax, 0A ;从这里开始的三条指令其实就是 10-i-1
- 0041E4DB sub eax, dword ptr [ebp-8]
- 0041E4DE sub eax, 1
- 0041E4E1 cmp dword ptr [ebp-14], eax ;这里就是j<10-i-1
- 0041E4E4 jge short 0041E510 ;大于就跳
- 0041E4E6 mov eax, dword ptr [ebp-14]
- 0041E4E9 mov ecx, dword ptr [ebp-14]
- 0041E4EC mov edx, dword ptr [ebp+eax*4-44]
- 0041E4F0 cmp edx, dword ptr [ebp+ecx*4-40] ;这里其实就是 if(arr[j]<arr[j+1])
- 0041E4F4 jge short 0041E50E ;如果大于那么就不执行SWAP函数
- 0041E4F6 mov eax, dword ptr [ebp-14]
- 0041E4F9 lea ecx, dword ptr [ebp+eax*4-40]
- 0041E4FD push ecx ;压入参数a
- 0041E4FE mov edx, dword ptr [ebp-14]
- 0041E501 lea eax, dword ptr [ebp+edx*4-44]
- 0041E505 push eax ;压入参数b
- 0041E506 call 0041D20C ;这里就是SWAP互换函数
- 0041E50B add esp, 8
- 0041E50E jmp short 0041E4CD ;返回进行for(j=0;j<10-i-1;j++) 循环
- 0041E510 jmp short 0041E4B5 ;返回进行for(i=0;i<10;i++) 循环
- 0041E512 mov dword ptr [ebp-8], 0 ;好了这里就是对最后一个循环的 i 初始化
- 0041E519 jmp short 0041E524
- 0041E51B mov eax, dword ptr [ebp-8]
- 0041E51E add eax, 1
- 0041E521 mov dword ptr [ebp-8], eax
- 0041E524 cmp dword ptr [ebp-8], 0A ;比较 i<10
- 0041E528 jge short 0041E559 ;大于就跳
- 0041E52A push 0041C505 ;这个参数就是endl
- 0041E52F mov eax, dword ptr [ebp-8]
- 0041E532 mov ecx, dword ptr [ebp+eax*4-44]
- 0041E536 push ecx
- 0041E537 push 004570C8 ; 字符传“正确的从大到小的排序:”
- 0041E53C push 004607D0
- 0041E541 call 0041CB6D ;这里还是显示字符串
- 0041E546 add esp, 8
- 0041E549 mov ecx, eax
- 0041E54B call 0041C631 ;显示数据arr[i]
- 0041E550 mov ecx, eax
- 0041E552 call 0041CB9A ;将光标换行
- 0041E557 jmp short 0041E51B ;返回继续循环
- 0041E559 xor eax, eax
- 0041E55B push edx
- 0041E55C mov ecx, ebp
- 0041E55E push eax
- 0041E55F lea edx, dword ptr [41E580]
- 0041E565 call 0041C5AF
- 0041E56A pop eax
- 0041E56B pop edx
- 0041E56C pop edi
- 0041E56D pop esi
- 0041E56E pop ebx
- 0041E56F add esp, 108
- 0041E575 cmp ebp, esp
- 0041E577 call 0041CD7A
- 0041E57C mov esp, ebp
- 0041E57E pop ebp
- 0041E57F retn
复制代码
*********************************************************
注:在bbs.chinadbg.cn上正在举行基础算法学习活动,欢迎大家来玩
by kill203
[ 本帖最后由 kill203 于 2007-8-9 19:53 编辑 ] |
|