回 帖 发 新 帖 刷新版面

主题:排序

要求输入10个自然数,无序的,先在屏幕上显示出来,按然后一下m就按从大到小排列;按一下l就按从小到大排列。结果也要显示出来。在下初学汇编,请高手编一个小程序出来,好让我参考参考,谢谢!!!!

回复列表 (共2个回复)

沙发

给你一个冒泡排序的程序修改一下就可以实现你的要求了
DATA SEGMENT
      BIN DW 20 DUP(?),0DH,0AH,'$'
      SUM DB 120 DUP(?),0DH,0AH,'$'
      P1 DB 'INPUT THE NUMBER',0DH,0AH,'$'
      P2 DB 'FROM SMALL TO BIG',0DH,0AH,'$'
      Z DB 0
     
DATA ENDS
STACK SEGMENT
      NUM3 DW 20 DUP(?)
STACK ENDS
CODE  SEGMENT
    MAIN PROC FAR
    ASSUME CS:CODE,DS:DATA,SS:STACK
START:
     MOV AX,STACK
     MOV SS,AX
     PUSH DS
     XOR AX,AX
     PUSH AX
     MOV AX,DATA
     MOV DS,AX
     MOV DX,OFFSET P1
     MOV AH,9
     INT 21H
     MOV BX,0
     MOV CX,0
     MOV SI,0
INP0:MOV Z,0     
INP:  
      MOV AH,01H
      INT 21H
      CMP AL,20H
      JZ WRITE10
      CMP AL,0DH
      JZ WRITE20
      CMP AL,'+'
      JZ INP0
      CMP AL,'-'
      JZ INP1
      SUB AL,30H
      MOV CL,AL
      MOV CH,0
      MOV AX,BX
      MOV BX,0AH
      MUL BX
      MOV BX,AX
      ADD BX,CX
      JMP INP
INP1: MOV Z,1
      JMP INP
WRITE10:
      CMP Z,1
      JNZ WRITE1
      NEG BX
WRITE1:
      MOV [BIN+SI],BX
      ADD SI,2
      MOV BX,0
      JMP INP
WRITE20:
      CMP Z,1
      JNZ WRITE2
      NEG BX
WRITE2:
      MOV [BIN+SI],BX
      ADD SI,2
      MOV DL,0AH
      MOV AH,02H
      INT 21H
CHANGE:
      XOR BX,BX
      MOV CX,20
      DEC CX
L1:
     PUSH CX
L2:
     MOV AX,BIN[BX]
     CMP AX,BIN[BX+2]
     JLE CONT1
     XCHG AX,BIN[BX+2]
     MOV BIN[BX],AX
CONT1:
     ADD BX,2
     LOOP L2
     POP CX
     MOV BX,0
     LOOP L1
     MOV AH,9
     MOV DX,OFFSET P2
     INT 21H

     MOV SI,0
     MOV DI,0
     MOV CX,20
L3:  MOV SUM[DI],'+'
     MOV AX,BIN[SI]
     CMP AX,0
     JGE L4
     NEG AX
     MOV SUM[DI],'-'
L4:   CWD
      MOV BX,10000
      DIV BX
      ADD AL,30h
      INC DI
      MOV SUM[DI],AL
      MOV AX,DX
      CWD
      MOV BX,1000
      DIV BX
      ADD AL,30h
      INC DI
      MOV SUM[DI],AL
      MOV AX,DX
      MOV BL,100
      DIV BL
      ADD AL,30h
      INC DI
      MOV SUM[DI],AL
      MOV AL,AH
      CBW
      MOV BL,10
      DIV BL
      ADD AL,30h
      INC DI
      MOV SUM[DI],AL
      ADD AH,30h
      INC DI
      MOV SUM[DI],AH
      ADD SI,2
      INC DI
      LOOP L3
PRINT : 
      MOV DX,OFFSET SUM
      MOV AH,09h
      INT 21h         
       
         
RET
MAIN    ENDP
CODE     ENDS
    END  START
     

板凳

谢了,不过有没有修改好的

我来回复

您尚未登录,请登录后再回复。点此登录或注册