汇编程序

;本汇编程序使用冒泡排序算法将长度为20个字的数组由大到小进行排序
;使用简化的段定义  
TITLE   BUBBLE SORT 20 WORDS OF DATA
PAGE    60, 132
	    .MODEL SMALL
	    .STACK 64
;------------------------------------------
    	.DATA
ARRAY   DW      18,1,5,9,17,3,2,4,6,10,11,20,8,16,19,7,13,14,12,15   
N       EQU     20
;------------------------------------------ 
    	.CODE
MAIN	PROC	FAR		;程序的起点
	    MOV	AX, @DATA	;装载数据段的地址
	    MOV	DS, AX		;将数据段的地址赋给DS
	 	MOV CX, N-1     ;设置循环次数为N-1次     
	 	MOV DX, 1       ;控制外部循环的变量,初始化为1
AGAIN:  CALL INNER      ;通过调用子程序的方式进入内部循环       
        LOOP AGAIN      ;如果CX<>0,继续执行AGAIN
  	    MOV AH, 4CH		;返回程序控制到DOS中
	    INT	21H		        
MAIN    ENDP        	     
;------------------------------------------
;内部循环
INNER   PROC    NEAR
        PUSH CX         ;将主程序中的CX存入堆栈中
        MOV CX, N-1     ;设置循环次数为N-1次       
        MOV SI, 0       ;初始化索引         
;重复比较       
RECMP:  MOV AX, ARRAY[SI]
        CMP AX, ARRAY[SI+2]
        JGE NOCH        ;如果AX>ARRAY[SI+2]则不进行交换,跳转到NOCH
        XCHG AX, ARRAY[SI+2]
        XCHG AX, ARRAY[SI]     	        
;不进行交换,移动到数组的下一个字        
NOCH:   INC SI          ;将SI加2移动到下一个字
        INC SI
        LOOP RECMP      ;如果CX<>0,继续循环
        POP CX          ;循环结束后弹出堆栈中的CX,退出内部循环
        RET
INNER   ENDP               
        END    MAIN		;结束主程序         
             
	    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值