您的当前位置:首页正文

汇编程序

2024-11-22 来源:个人技术集锦
;本汇编程序使用冒泡排序算法将长度为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		;结束主程序         
             
	    

显示全文