在10个同学的成绩中求最高分和最低分,还有平均分,还有各分段的人数

以下是我编的,很遗憾不能显示正确的结果,请各位高人帮忙看看,100分奖励!
.model small
.data
  score  db  90,95,45,76,67,66,86,78,92,89 ;成绩
  max    db  0                      ;最高分
  min    db  0                      ;最低分
  avg    db  0                        ;平均成绩
  sum    dw  0                      ;总成绩
  A1     db  0                      ;等级A
  B1     db  0                      ;等级B
  C1     db  0                        ;等级C
  D1     db  0                        ;等级D
  count  equ 10                     ;学生人数
  str    db 2 dup(?),0dh,0ah,'$'   ;用来存放临时字符
.code
.startup
main proc far
  xor ax,ax
  xor dx,dx
  xor cx,cx
  mov cx,count
  lea si,score
  mov ax,[si]
  mov max,al
  mov min,al
  call makeScore                    ;子过程
  
  xor si,si
  xor di,di
  lea bx,score                      ;显示成绩
  mov si,cx
  dec si
  lea di,str
  call display
  
  xor si,si
  xor di,di
  lea bx,max                        ;显示最高分
  mov si,0
  lea di,str
  call display
  
  xor si,si
  xor di,di
  lea bx,min                        ;显示最低分
  mov si,0
  lea di,str
  call display
  
  xor si,si
  xor di,di
  lea bx,avg                        ;显示平均分
  mov si,0
  lea di,str
  call display

  mov ah,4ch
  int 21h
main endp

makeScore proc                      ;求最大,最小分数,平均成绩和等级人数
  push cx
again:
  mov bl,[si]
  add al,bl
  cwd
  mov sum,ax
  mov bl,max
  mov al,min
  .if  [si] > bx
    mov bl,[si]
    mov max,bl
  .elseif [si] < ax
    mov al,[si]
    mov min,al
  .endif
  .if [si] > 80
    inc A1
  .elseif [si] > 70
    inc B1
  .elseif [si] > 60
    inc C1
  .else
    inc D1
  .endif
  inc si
  inc si
 loop again
 mov ax,sum
 mov bx,10d
 div bx
 mov avg,al
 pop cx  
 ret   
makeScore endp

display proc
lop: 
  mov dl,[bx][si]
  call disc
  add dh,30H
  mov [di],dh
  inc di
  add dl,30h
  mov [di],dl
  inc di
  dec si
  loop lop
  lea dx,str
  mov ah,9H
  int 21H
  ret
display endp

disc proc
   push cx
   mov dh,dl
   and dh,0f0H
   mov Cl,4
   shr dh,cl
   and dl,0FH
   pop cx
   ret
disc endp

.exit 0
end