四、 源程序清单
DATA SEGMENT BUF DB 10 DUP(0)
STRING1 DB 'Please enter the score ' NUMBER DB 31H,': ','$'
STRING2 DB 0AH,'The ranged scores are:','$'
STRING3 DB 'After removing the highest and lowest score, the average score is: ','$'
ERROR DB 'ERROR',0AH,0DH,'$' DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX XOR SI,SI;SI置0 MOV CX,9;9个数 INPUT:
LEA DX,STRING1 MOV AH,9 INT 21H
MOV AH,1
INT 21H;输入得分的十位到AL CMP AL,'0'
JB ER ;AL<0小于则跳到ER CMP AL,'1'
JA ER ;AL>1则跳到ER SUB AL,30H MOV DL,10
MUL DL;十位乘以10 MOV DX,AX;DX存十位数 MOV AH,1
INT 21H;输入得分的个位到AL CMP AL,'0'
JB ER ;AL<0小于则跳到ER CMP AL,'9'
JA ER ;AL>10则跳到ER SUB AL,30H
ADD AL,DL;个位十位相加到AL MOV BUF[SI],AL INC SI INC NUMBER MOV DL,0AH;换行
MOV AH,2 INT 21H
MOV DL,0DH;回车 INT 21H
LOOP INPUT;循环输入9次 JMP RANGE_0;转入排序 ER:
;输入错误后返回重新输入
LEA DX,ERROR
MOV AH,9 INT 21H JMP INPUT RANGE_0: MOV BX,1 MOV CX,9 XOR DI,DI RANGE: MOV AL,BUF[DI] CMP AL,BUF[DI+1] JAE NEXT_1 XCHG BUF[DI+1],AL MOV BUF[DI],AL MOV BX,0
NEXT_1: INC DI LOOP RANGE CMP BX,0 JE RANGE_0 ;冒泡法排列得分
LEA DX,STRING2 MOV AH,9 INT 21H MOV CX,9 XOR SI,SI;SI清零 MOV AH,2 RANGE_OUTPUT:
; 输出排序后的得分 MOV DL,BUF[SI] ADD DL,30H
CMP DL,39H;判断是否是10分 JA TENS_1 JBE TENS_0 TENS_1:
;十位数为1,则输出'10'
MOV BX,1 MOV DL,'1'
INT 21H MOV DL,'0' INT 21H
INC SI MOV DL,',' INT 21H JMP NEXT_2 TENS_0:
;十位数为0,则按原得分输出 INT 21H INC SI MOV DL,',' INT 21H NEXT_2:
LOOP RANGE_OUTPUT MOV AH,2 MOV DL,0AH;换行 INT 21H
MOV DL,0AH;换行 INT 21H
MOV DL,0DH;回车 INT 21H