Intel x86 MASM32冒泡排序算法程序(亲测可运行)+如何使用MASM32教程
目前网络上似乎还没有比较令人满意的MASM32的冒泡排序实现代码,曾经的我也为此而感到头痛,经过一年的学习我又回过头来,着手编写了这段MASM32的可执行冒泡排序代码,供广大同学学习。
一、MASM32冒泡排序
下图是程序运行后的效果:
降序排序版:

升序排序版:

下附降序排序代码:
倘若要获得升序排序代码只需将“jb follow”那行改为“ja follow”即可。
;x86(32位)汇编语言程序 冒泡法排序程序 sort1_x86.asm 降序排列,从大到小 .486 ; create 32 bit code.model flat, stdcall ; 32 bit memory modeloption casemap :none ; case sensitive include \masm32\macros\macros.asm includelib \masm32\lib\masm32.libincludelib \masm32\lib\gdi32.libincludelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\wsock32.libincludelib \masm32\lib\msvcrt.libinclude \masm32\include\msvcrt.incinclude \masm32\include\masm32.incinclude \masm32\include\gdi32.incinclude \masm32\include\user32.incinclude \masm32\include\kernel32.inc.data arr dd 8, 1, 5, 2, 7, 9, 6, 4, 3, 10 ; 10个原始数据,数据可以改变,排好后,还放在这里 len1 byte ? len2 byte ? fmt byte '%d ',0.code
main: ;-------------------显示原始数据----------------------------mov len1,lengthof arr ;获取数据长度 mov ebx,offset arr ;获取数据的起始地址xor ecx,ecxmov al,len1
prt1: movsx ebx,alcmp ecx,ebxjnb fina1mov edx, arr[(type arr)*ecx]pushadinvoke crt_printf,offset fmt,edx ;显示一个数据popadinc ecxjmp prt1
fina1:print chr$(" ",13,10) ;显示回车、换行 print chr$(" ",13,10) ;显示回车、换行;----------------------------------------------排序--------------------mov len1,lengthof arr ;数据长度 -> len1mov ebx,offset arr ;数据偏移地址(首地址) -> ebxmov al,0h ; al=0
lp: cmp al,len1jnb done ; 排序结束,转done mov ah, 1h ; ah=1
inner: mov cl,len1 ; cl <- len1=数据长度mov len2,cl ; len2 <- clsub len2,al ; len2 <- len2-alcmp ah,len2 ; 比较ah 和 len2jnb last ; 跳出内循环movsx esi,ah ; esi <- ahmov bl,ah ; bl = ahsub bl,1 ; bl <1 bl-1movsx edi,bl ; edi <- blmov ecx, arr[(type arr)*esi] ;ecx <- [esi]mov edx, arr[(type arr)*edi] ;edx <_ [edi]cmp ecx,edx ;比较ecx和edxjb follow ;小于则转 降序排序 从大到小 mov edx,arr[(type arr)*esi] ;edx <- [esi]xchg edx,arr[(type arr)*edi] ;edx与[edi]交换xchg edx,arr[(type arr)*esi] ;edx与[esi]交换
follow: inc ah ; ah +1 -> ah jmp inner ; 转内循环
last: inc al ; al+1 -> al jmp lp ;转外循环;----------------------------------显示排序后的数据------------------------
done: xor ecx,ecx mov al,len1
prt: movsx ebx,alcmp ecx,ebxjnb finamov edx, arr[(type arr)*ecx]pushadinvoke crt_printf,offset fmt,edxpopadinc ecxjmp prt
fina: exitend main
二、MASM32汇编程序运行
可能有童鞋还不知道要如何运行MASM32汇编程序,可以参考下面的教程:
1、首先要下载masm32保存到任意盘中(一般是D盘,我操作演示时是用D盘),还需要有一个x86的配套文件夹(相关的配置问题,在此不再过多赘述,可上网查找资料)。

2、然后点击运行\masm32目录中的“qeditor.exe”

会出现MASM32的界面:

3、点击左上角的File,Open位于D盘x86目录下的.asm文件


特别要注意的是:.asm文件必须要放在D盘的x86文件夹下,在这里我将待运行文件命名为“sort1_x86.asm”。

打开后会显示程序的代码内容,有些乱码属于正常现象

4、然后点击Project下的Console Assemble &Link进行编译和连接

若该步骤成功,则出现下图:

5、运行:点击右上方这个黑黑的按钮

出现如下图的控制台弹窗:

毛东西没有,但莫要慌,敲入文件名,将后缀.asm改为.exe,如下图:

如下图就是降序排序的结果:

实验结束:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
