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 model
    option casemap :none                    		; case sensitive 
    include \masm32\macros\macros.asm       	
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\wsock32.lib
    includelib \masm32\lib\msvcrt.lib
    include \masm32\include\msvcrt.inc
    include \masm32\include\masm32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\user32.inc
    include \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,ecx
	mov al,len1
prt1:	
	movsx ebx,al
	cmp ecx,ebx
	jnb fina1
	mov edx, arr[(type arr)*ecx]
	pushad
	invoke crt_printf,offset fmt,edx              ;显示一个数据
	popad
	inc ecx
	jmp prt1
fina1:
    	print chr$(" ",13,10)                                 ;显示回车、换行           
	print chr$(" ",13,10)                                 ;显示回车、换行

;----------------------------------------------排序--------------------
	mov len1,lengthof arr                           ;数据长度  ->  len1
	mov ebx,offset arr                                 ;数据偏移地址(首地址)  ->   ebx
	mov al,0h                                              ; al=0			 	
lp:	
	cmp al,len1
	jnb done                                               ; 排序结束,转done				

	mov ah, 1h	                             ; ah=1		
inner:				
	mov cl,len1                                          ; cl <- len1=数据长度
	mov len2,cl                                          ; len2 <- cl
	sub len2,al                                           ; len2 <- len2-al
	cmp ah,len2                                         ; 比较ah 和 len2
	jnb last                                                 ; 跳出内循环
	movsx esi,ah 		            ; esi <- ah
	mov bl,ah                                            ; bl = ah
	sub bl,1                                               ; bl <1 bl-1
	movsx edi,bl                                       ; edi <- bl
	mov ecx, arr[(type arr)*esi]                ;ecx <- [esi]
	mov edx, arr[(type arr)*edi]               ;edx <_ [edi]
	cmp ecx,edx                                       ;比较ecx和edx
	jb 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,al
	cmp ecx,ebx
	jnb fina
	mov edx, arr[(type arr)*ecx]
	pushad
	invoke crt_printf,offset fmt,edx
	popad
	inc ecx
	jmp prt
fina:	
	exit

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

 

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

实验结束:

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值