[汇编版]冒泡排序、快速排序、堆排序
刚刚看完<Intel汇编程序语言设计>一书,用汇编写了几个基本的排序算法。编写的汇编函数代码都是是使用stdcall调用规范的,所以C语言工程也可以链接并调用这些函数的,怎么调用以后在再文章说明。另外,我把程序的不同模块放在不同的源文件中,使代码结构更清晰。和C编译器生成的汇编代码不同的是,为了效率最佳,内存操作最少,我在函数中都没有定义局部变量,大量使用寄存器,刚好算法不是太复杂,寄存器够用,坏处是代码可读性比较差了。程序的编译环境是VS2008,关于如何配制编译环境,可以参看我之前的文章<用Visual Studio 2008编写Win32汇编程序>。算法都是些基本的算法,就不多加说明,只是在程序中加了少许注释。我把几个算法都放在一个工程中,下面是工程中的源文件和简单介绍。
Head.inc
BubbleSort.asm
QuickSort.asm
HeapSort.asm
PrintNumber.asm
main.asm
包含文件:Head.inc
包含文件类似于C/C++的头文件,我们可以把引用的库函数,或者是其他源文件中定义的函数的声明放在里面。和C语言一样,包含文件中的函数声明告诉编译器,在这个源文件中我们没有这个函数的实现,但是你可以使用它,在Link时可以在其他.obj文件中找到它的实现。(此外,和C语言一样,如果被调用的函数在源代码中的位置调用者之后,也要在调用者上面的位置声明被调用的函数),下面是源代码:
ExitProcess PROTO, dwExitCode:DWORD ;Windows API
GetStdHandle PROTO, nStdHandle:DWORD ;Windows API
WriteConsoleA PROTO,hConsoleOutput:DWOR