程序修改如下:
DATAS SEGMENT
buf db 9 dup(0)
string1 db'score from teacher'
figure db 31h,":","$"
string2 db "the average is:"
result db 20h,".",20h,20h,"$" ;保留两位小数
error db 'Invalid Data Input',0dh,0ah,'$' ;是data不是date(日期)
max db ?
min db ?
DATAS ENDS
CODES SEGMENT
ASSUME CS:codes,DS:DATAS
binin: mov ax,DATAS
mov ds,ax
call input
call output
mov ah,4ch
int 21h
input proc near
xor si,si
mov cx,9
input0: lea dx,string1
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,30h
je input1
cmp al,31h
je input2
jmp error1
input1:mov ah,1
int 21h
cmp al,30h
jb error1
cmp al,39h
ja error1
;cmp al,max
;ja smax
;cmp al,min
;jb smin
jmp save1
input2:mov ah,1
int 21h
cmp al,30h
je ten
jmp error1
ten: mov al,10
jmp save2
;smax: mov max,al
; jmp save
;smin: mov min,al
; jmp save
save1: sub al,30h;把ASCII转化为数值
save2: mov buf[si],al
cmp si,0
jne maxmin
mov max,al
mov min,al
jmp lop
maxmin:cmp max,al
ja smax
mov max,al
smax: cmp min,al
jb lop
mov min,al
lop: inc si
inc figure
mov ah,02h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
loop input0
jmp finish
error1:lea dx,error
mov ah,9
int 21h
jmp input0
finish:ret
input endp
output proc near
mov ax,0;保存和值,初始为0
xor si,si
mov cx,9
jia:add al,buf[si];数值累加
inc si
loop jia
sub al,max;去掉最大值
sub al,min;去掉最小值
MOV RESULT,AL
MOV BL,7
DIV BL
ADD AL,30H
MOV result,AL
MOV SI,2 ;处理小数
MOV CX,2
NEXT:MOV AL,AH
MOV BL,10
MUL BL
MOV BL,7
DIV BL
ADD AL,30H
MOV RESULT[SI],AL
INC SI
LOOP NEXT
lea dx,string2;输出结果信息
mov ah,9
int 21h
ret
output endp
codes ends
end binin
程序运行结果如下: