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

来源:互联网 发布:第八届云计算大会 编辑:程序博客网 时间:2024/05/18 15:04

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


/* 使用内联汇编,从大到小排序。 */#include <iostream>using namespace std;#define MAX_SIZE20int 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{movesi,p;movecx,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");}


运行效果如下:


0 0