⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hui42.asm

📁 输入一组有符号字数据。对该组数进行排序,按照从大到小的顺序以用户指定的进制形式输出排序后的结果。
💻 ASM
字号:
.386
STACK     SEGMENT   USE16    STACK
          DB   200   DUP(0)
STACK     ENDS
DATA      SEGMENT   USE16   
BUF       DB   100
          DB   0
          DB   100  DUP(0)
BUF1      DW   100   DUP(0)
BUF2      DB   100   DUP(0)                                    
BUF3      DB   10
          DB   0
          DB   10  DUP(0)
BUF4      DB   0AH,0DH,'Please input numbers:',0AH,0DH,'$'
BUF5      DB   0AH,0DH,'Output  Format (1: decimal; 2 :hex) :$'
BUF6      DB   0AH,0DH,'Error!$'
BUF7      DB   0AH,0DH,'$'
FLAG      DB  0
FLAG1     DB  0
FLAG2     DB  0
FLAG3     DB  0                                                
COUNT     DB  0
READ      MACRO   A
          LEA     DX,A
          MOV     AH,10
          INT      21H
          ENDM
WRITE     MACRO   B
          LEA     DX,B
          MOV     AH,9
          INT      21H                                         
          ENDM
DATA      ENDS
CODE      SEGMENT   USE16
          ASSUME    DS:DATA,CS:CODE,SS:STACK
START:    MOV    AX,DATA
         MOV    DS,AX 
         MOV    FLAG,0 
         WRITE   BUF4
         READ   BUF
         LEA     BX,BUF+1                                          
         LEA     BP,BUF1
         CALL    CHILD1 
         CMP     FLAG,0
         JNZ      START         
         MOV     CX,DI
         MOV     SI,DI         
         CALL    CHILD2 
AGAIN:    WRITE   BUF5                                          
         READ    BUF3
         CMP     BUF3+2,'1'
         JZ       START1
         CMP     BUF3+2,'2'
         JZ       START2
         JMP      AGAIN
START1:   CALL     CHILD4
         JMP     EXIT
START2:    CALL    CHILD3 
          JMP     EXIT                                                 
CHILD1    PROC  NEAR
         MOV   AX,0
         MOV   AL,[BX]
         CMP   AX,0
         JNZ    CHILD19
         MOV    FLAG,1
         JMP    EXIT1
CHILD19:  INC    BX
         MOV   DX,0
         MOV   DI,0
LOP1:     CMP    AX,0
         JNZ      CHILD18
         MOV     FLAG3,1
         JMP      CHILD17
CHILD18:  CMP    [BX],BYTE PTR 20H
         JNZ     CHILD11
         INC    BX                                              
         DEC   AX
         CMP    FLAG2,0
         JNZ    CHILD17
         JMP    LOP1
CHILD11:   CMP    [BX],BYTE PTR '+'
          JNZ     CHILD12
          INC     BX
          DEC     AX
          JMP     CHILD13
CHILD12:   CMP    [BX],BYTE PTR '-'                                
          JNZ     CHILD13
          INC     BX
          DEC    AX
          MOV     FLAG1,1
CHILD13:   CMP    [BX],BYTE PTR 30H
          JL     CHILD14
          CMP    [BX],BYTE PTR 39H
          JG     CHILD14                                                    
          JMP    CHILD15
CHILD14:   WRITE  BUF6
          MOV   FLAG,1
          JMP    EXIT1
CHILD15:   MOVSX   CX,[BX]
          INC      BX
          DEC      AX
          SUB     CX,30H
          CMP     FLAG1,0
          JZ       CHILD16                                       
          NEG     CX
CHILD16:   IMUL     DX,10
          JO      CHILD14
          ADD     DX,CX 
          JO      CHILD14                  
          MOV     FLAG2,1 
          JMP      LOP1          
CHILD17:   MOV     DS:[BP],DX
          ADD     BP,2
          INC      DI                                           
          MOV     DX,0
          MOV     FLAG1,0 
          MOV     FLAG2,0
          CMP     FLAG3,0
          JNZ      EXIT1       
          JMP      LOP1
EXIT1:     RET
CHILD1    ENDP
CHILD2    PROC    NEAR  
          PUSH    SI     
          DEC     DI
LOP2:      CMP     DI,0
          JZ     EXIT2                                          
          MOV     DX,0
          LEA     SI,BUF1
CHILD21:   CMP     DX,DI
          JL     CHILD22
          DEC    DI
          JMP     LOP2
CHILD22:   MOV     AX,[SI]
          MOV     BX,[SI+2]
          CMP     AX,BX
          JG      CHILD23
          MOV     [SI],BX                                 
          MOV     [SI+2],AX
CHILD23:   ADD      SI,2
          INC       DX
          JMP      CHILD21
EXIT2:     POP      SI
          RET
CHILD2    ENDP
CHILD3    PROC    NEAR
          LEA    SI,BUF1
          LEA    DI,BUF2
A2:       MOV    FLAG,0
          MOV    BX, [SI]                                        
          MOV    BP, [SI]
          CMP    BX,0
          JL     A4
          JNZ    A3
          MOV    BYTE PTR [DI],'0'
          INC     DI
          JMP     PRINT
A3:      SHR    BH,4                                    
         CMP    BH,9
         JG     A5                                              
         CMP    BH,0
         JZ     SEC
         OR     BH,30H
         MOV    [DI],BH
         MOV    FLAG,1
         INC     DI
         JMP    SEC
A4:       MOV    BYTE PTR [DI],'-'
         INC    DI
         NEG    BX                                            
         MOV    BP,BX
         JMP    A3
A5:       MOV    BYTE PTR [DI],'0'
         INC     DI
         ADD    BH,37H
         MOV    [DI],BH
         MOV    FLAG,1
         INC    DI
SEC:      MOV    BX,BP
         AND    BH,0FH                                          
         CMP    BH,9
         JG     A6
         CMP    BH,0
         JNZ     SEC1
         CMP    FLAG,0
         JZ     THI
SEC1:    OR     BH,30H
         MOV    [DI],BH
         MOV    FLAG,1
         INC    DI                                              
         JMP    THI
A6:      CMP    FLAG,0
         JNZ    A61
         MOV   BYTE PTR [DI],'0'
         INC    DI
A61:     ADD    BH,37H
         MOV    [DI],BH
         MOV    FLAG,1
         INC    DI
THI:      MOV    BX,BP                                           
         SHR    BL,4
         CMP    BL,9
         JG     A7
         CMP    BL,0
         JNZ    THI1
         CMP    FLAG,0
         JZ     FOU      
THI1:     OR     BL,30H
         MOV    [DI],BL
         MOV    FLAG,1                                          
         INC    DI
         JMP    FOU
A7:      CMP     FLAG,0
         JNZ     A71
         MOV    BYTE PTR [DI],'0'
         INC     DI
A71:      ADD    BL,37H
         MOV    [DI],BL
         MOV    FLAG,1
         INC      DI                                              
FOU:     MOV    BX,BP
         AND    BL,0FH
         CMP    BL,9
         JG     A8            
         OR     BL,30H
         MOV    [DI],BL
         INC    DI
         JMP    NEXT
A8:       CMP    FLAG,0
          JNZ    A81                                             
          MOV   BYTE PTR [DI],'0'
          INC    DI
A81:     ADD     BL,37H
         MOV    [DI],BL
         INC     DI
NEXT:     MOV    BYTE  PTR [DI],'H'
         INC     DI
PRINT:    MOV    BYTE PTR [DI],20H
         INC     DI 
         ADD    SI,2                                             
         DEC     CX
         JNZ    A2 
         MOV    BYTE PTR [DI],'$'
         WRITE  BUF7
         WRITE  BUF2
         RET
CHILD3   ENDP
CHILD4   PROC   NEAR
         MOV    BX,0
         MOV   CX,WORD PTR 10
         MOV   COUNT,0
         LEA    BP,BUF1
LOP4:     MOV   DX,0                                                
         MOV    AX,DS:[BP]
         CMP    AX,0
         JG     CHILD42
         JNZ    CHILD41
         MOV    DX,WORD PTR 0
         PUSH   DX
         MOV    COUNT,1
         JMP    CHILD43
CHILD41:  NEG   AX
         MOV   BUF2[BX],'-'
         INC    BX
CHILD42:  MOV   DX,0
         DIV    CX                                                
         PUSH   DX
         INC     COUNT
         CMP    AX,0
         JNZ    CHILD42         
CHILD43:  POP    AX
         ADD    AL,30H
         MOV    BUF2[BX],AL
         INC     BX
         DEC    COUNT                                            
         CMP    COUNT,0
         JNZ     CHILD43
         MOV    BUF2[BX],BYTE PTR 20H
         INC     BX
         ADD     BP,2
         DEC      SI
         CMP     SI,0
         JNZ      LOP4
         MOV    BUF2[BX],BYTE PTR '$'
         WRITE  BUF7
         WRITE  BUF2 
         RET
CHILD4   ENDP 
EXIT:     MOV     AH,4CH
         INT      21H 
CODE     ENDS
         END    START                                             

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -