汇编16进制排序

  1 DATA SEGMENT  
  2     BUF DB 0,0,0,0,0,0,0,0,0
  3     BUFSIZE = $-BUF-1      
  4     FLAG DB 0            ;是否完成排序的标志
  5     F_INSERT DB 0        
  6     CR DB 0AH,0DH,'$'
  7 DATA ENDS      
  8 STACK SEGMENT
  9     AA DB 100 DUP(0)
 10 STACK ENDS
 11 CODE SEGMENT
 12     ASSUME CS:CODE,DS:DATA,SS:STACK
 13 START:
 14     MOV AX,DATA
 15     MOV DS,AX    
 16     LEA SI,BUF                
 17     MOV CX,BUFSIZE
 18 INPUT:    ;键盘输入两位十六进制数,输错了没有报错功能,只能按给定规则输入
 19     MOV AH,01H     ;第一位数输入
 20     INT 21H   
 21     CMP AL,'9'     ;如果是A-F        
 22     JA HEHE 
 23     JMP HEHE1
 24     HEHE:          ;由ascii码得到本来的值
 25     SUB AL,'A'
 26     ADD AL,0AH  
 27     JMP HEHE_END0
 28     HEHE1:
 29     SUB AL,'0'  
 30     HEHE_END0:     ;乘以16,充当第一位数(即“十”位)
 31     MOV BL,10H     
 32     MUL BL
 33     MOV [SI],AL 
 34      
 35     MOV AH,01H     ;第二位数输入
 36     INT 21H  
 37     CMP AL,'9'     
 38     JA HEHE2 
 39     JMP HEHE3
 40     HEHE2:
 41     SUB AL,'A'
 42     ADD AL,0AH   
 43     JMP HEHE_END1
 44     HEHE3:
 45     SUB AL,'0'     
 46     HEHE_END1: 
 47     ADD [SI],AL    ;充当个位
 48     MOV AH,01H
 49     INT 21H
 50     INT 21H  
 51     INC SI          
 52     LOOP INPUT
 53 SORT:   
 54     LEA DX,CR          
 55     MOV AH,09H
 56     INT 21H
 57      
 58     LEA BX,BUF           
 59     MOV DX,BUFSIZE
 60     SUB DX,1        ;把内循环的循环次数存在DX,每次内循环初始时赋给CX,循环N-1次 
 61     CMP F_INSERT,1
 62     JNZ INLOP  
 63     INC DX     
 64 INLOP:          ;一次遍历
 65     MOV SI,BX   
 66     MOV CX,DX      
 67     MOV FLAG,0
 68 CM:         
 69     MOV AL,[SI]    ;前面元素
 70     INC SI
 71     CMP AL,[SI]    ;后面元素
 72     JNA OUTLOP     ;前小于后,不交换
 73     ;IF([SI-1]>[SI]),SWAP--交换  
 74     MOV FLAG,1     ;表示未完成排序,FLAG置1
 75     MOV AH,[SI]    ;AH为中间变量
 76     MOV [SI-1],AH
 77     MOV [SI],AL
 78 OUTLOP:           ;外循环
 79     LOOP CM     
 80     DEC DX   
 81     JZ ORIGIN
 82     CMP FLAG,0    ;FLAG为0,表示完成排序,直接退出循环
 83     JNZ INLOP     ;否则,跳入下一层内循环进行比较
 84 ORIGIN:  
 85     LEA SI,BUF   
 86     MOV CX,BUFSIZE   ;初始化CX,SI,为打印做准备 
 87     CMP F_INSERT,1
 88     JNZ PRINT
 89     INC CX    
 90 PRINT:
 91     MOV DL,[SI]
 92     MOV AH,00H
 93     MOV AL,DL    
 94     MOV BH,10H
 95     DIV BH      ;DL除以10H,得到高位上的数字
 96     MOV DL,AL   ;商,即十位上的数  
 97     MOV BL,AH   ;余数,即个位上的数   
 98 BIT2:       
 99     CMP DL,9    ;是否是A-F 
100     JA AF1
101     JMP ZN1   
102 ;处理十位上的数    
103 AF1:            ;A-F
104     SUB DL,0AH
105     ADD DL,'A'
106     MOV AH,02H
107     INT 21H        
108     JMP P1      
109 ZN1:            ;0-9
110     ADD DL,'0'
111     MOV AH,02H
112     INT 21H   
113 P1: 
114     MOV DL,BL      
115     CMP DL,9     
116     JA AF2
117     JMP ZN2      
118 ;处理个位上的数
119 AF2:  
120     SUB DL,0AH
121     ADD DL,'A'
122     MOV AH,02H
123     INT 21H    
124     JMP P2
125 ZN2:
126     ADD DL,'0'
127     MOV AH,02H
128     INT 21H 
129 ;打印H和空格    
130 P2:          
131     MOV DL,'H'
132     INT 21H
133     MOV DL,' '
134     INT 21H     
135     INC SI
136     LOOP PRINT   
137     CMP F_INSERT,1
138     JZ JMP EXIT      
139 ;打印完,插入一个数,再排序并打印   
140 INSERT: 
141     CMP F_INSERT,1
142     JZ EXIT
143     MOV F_INSERT,1    
144     LEA DX,CR          
145     MOV AH,09H
146     INT 21H
147          
148     LEA SI,BUF   
149     MOV AH,01H     ;第一位数输入
150     INT 21H   
151     CMP AL,'9'     ;如果是A-F        
152     JA HEHE4 
153     JMP HEHE5
154     HEHE4:          ;由ascii码得到本来的值
155     SUB AL,'A'
156     ADD AL,0AH  
157     JMP HEHE_END2
158     HEHE5:
159     SUB AL,'0'  
160     HEHE_END2:     ;乘以16,充当第一位数(即“十”位)
161     MOV BL,10H     
162     MUL BL
163     MOV [SI+BUFSIZE],AL 
164      
165     MOV AH,01H     ;第二位数输入
166     INT 21H  
167     CMP AL,'9'     
168     JA HEHE6 
169     JMP HEHE7
170     HEHE6:
171     SUB AL,'A'
172     ADD AL,0AH   
173     JMP HEHE_END3
174     HEHE7:
175     SUB AL,'0'     
176     HEHE_END3: 
177     ADD [SI+BUFSIZE],AL    ;充当个位
178     MOV AH,01H
179     INT 21H 
180     BUFSIZE = BUFSIZE-5
181     JMP SORT       
182 EXIT:    
183     MOV AH,4CH
184     INT 21H
185 CODE ENDS
186 END START

 

posted @ 2020-05-30 11:43  幻想Elapse  阅读(542)  评论(0编辑  收藏  举报