【微机原理与汇编】冒泡排序

【微机原理与汇编】冒泡排序_第1张图片
输入十个数据 进行冒泡排序
找个自己顺眼的C语言 冒泡排序 转换为汇编
下面是十个数的排序 其他个数的排序原理一样


;冒泡排序
DATAS SEGMENT 
    arr Dw 12 dup(?)  
    block db 32,'$'
    STR1 DB 'Please input 10 numbers:',13,10,'$' 
    STR2 DB 13,10,'The sort result:',13,10,'$' 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
   	
;输入   	
   	lea dx,STR1
   	MOV AH,09H
   	INT 21H
   	
   	mov di,0
   	
L3:	add di,2
	call input
	mov arr[di],ax
	cmp di,20
	jne L3 ;存入内存区
	
	
	mov si,offset arr;入口参数
    call SORT
    
    
;输出
    lea dx,STR2
   	MOV AH,09H
   	INT 21H   
   		
   	mov di,0
   
L4: 	
    add di,2
	mov ax,arr[di]
	call output
	cmp di,20
	jne L4
   
    MOV AH,4CH
    INT 21H
    
    
INPUT PROC
  
  	push BX
  	PUSH CX
  	PUSH DX


  	MOV DH,10 ;存乘数
 
L1:
   	MOV AH,1
   	INT 21H ;输入
   
   
   	CMP AL,'0'
   	JB L0
   	CMP AL,'9'
   	JA L0   ;不在0-9之内的直接跳到输出
   	SUB AL,48
   	MOV CL,AL;CL<-当前输入的数  CX=CL
   	;MOV CH,0  可有可无
   
   	MOV AX,BX  ;MUL 默认是乘AX ,BX<-存着之前的数
   	MUL DH
   	ADD AX,CX  ;新数+原来的数*10
   
   	MOV BX,AX  ;把加完后的数存到BX里
   	JMP L1
   
L0:
	MOV AX,BX
   	POP DX
   	POP CX
   	POP BX
   RET
INPUT ENDP ;出口参数是aX aX存着输入的数

   
OUTPUT PROC  
    PUSH BX
    PUSH CX
    PUSH DX 
    
    
    MOV BH,1
    MOV CL,10
    
AGAIN:
   
	DIV CL
	PUSH AX
	
	CMP AL,0
	JE PRINT
	INC BH
	MOV AH,0
	JMP AGAIN
PRINT:

	CMP BH,0
	JE  OVER
	POP DX
	
	MOV DL,DH
	ADD DL,48
	MOV AH,2
	INT 21H
	DEC BH 
	JMP PRINT
   
OVER:
 	lea dx,block
   	MOV AH,09H
   	INT 21H
	POP DX
	POP CX 
	POP BX

   	RET
   
OUTPUT ENDP


;排序子函数
SORT PROC
    push si;arr首地址
    push di
	push bx
	push cx
	push dx

  mov bx,0 ;外层循环计数
  mov cx,20;内层循环计数
  
;外层循环     
S1:
   mov di,si ;每次内部循环回到数组起始位置
   add bx,1
   cmp bx,10;外层循环结束条件 
   sub cx,2 ;走过一趟少比较一个数
   je E0
;内层循环   
S2:
   add di,2
   mov dx,[di+2];比较俩个数
   cmp dx,[di]
   ja S3
   
   xchg dx,[di];交换
   mov [di+2],dx

;内层循环结束条件   
S3:   
   cmp di,cx
   je S1
   jmp S2
   
E0:
    pop dx
	pop cx
	pop bx
	pop di
	pop si

  RET
SORT ENDP

CODES ENDS
    END START












你可能感兴趣的:(微机原理与汇编语言,#,实验,微机原理,汇编,冒泡排序)