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,如下图:

 

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

实验结束:


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部