您的位置:首页 > 编程语言 > C语言/C++

VC++使用内联汇编的例子:冒泡法排序(从大到小排序)

2015-11-11 12:30 351 查看
如果明白了冒泡排序的原理,从大到小或是从小到大,其实实现是相似的道理,如果每次排序都把最小的放在最后面,这样的话,循环下来,就是从大到小了,这里采用VC++内联汇编的方式实现,因为想学习一下内联汇编这种方法。

/* 使用内联汇编,从大到小排序。 */
#include <iostream>
using namespace std;
#define MAX_SIZE	20
int array[MAX_SIZE]={86,73,12,66,88,98,102,33,36,23,106,25,32,26,98,97,42,53,6,83};

void main()
{
int *p;
p = &array[0];
p--;
__asm
{
mov	esi,p;
mov	ecx,MAX_SIZE;
_LOOP1:
mov edx,ecx;
dec edx;
jz _EXIT;
_LOOP2:
mov eax,[esi+ecx*4];
mov ebx,[esi+edx*4];		//本身不需要比较
cmp ebx,eax;					//谁小谁放在最后面
jnb _NOCHG;
mov [esi+ecx*4],ebx;
mov [esi+edx*4],eax;		//交换
_NOCHG:
dec edx;
jnz _LOOP2;
dec ecx;
jmp _LOOP1;
_EXIT:
}
cout<<"使用内联汇编,从小到大排序:"<<endl;
for(int i=0;i<MAX_SIZE;i++)		//打印排序
cout<<array[i]<<" ";
cout<<endl;
system("pause");
}


运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: