下面是一个学生成绩管理程序,编译是没有出错的,但运行不对,请各位高手帮忙看一下是哪里的问题?谢谢!






DATA SEGMENT
MSG1 DB "Please input the number of the student:$"
MSG2 DB "Please input the source of the student:$"
MSG  DB "Please input the num you want:$"
MSG3 DB 0AH,0DH,'$'
STUDENT STRUCT
STRING DB 8,0,8 DUP('$')
SCORE DW 0

STUDENT ENDS
STU STUDENT 500 DUP({})
NUM DW ?
NUM1 DW ?
RESULT1 DB 8 dup('$'),'$'
RESULT2 DB 0,0,0,'$'
DATA ENDS
STACK SEGMENT PARA STACK
DB 20H DUP(?)
STACK ENDS
CODE SEGMENT
     ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      LEA DX,MSG1
      MOV AH,09H
      INT 21H
      ;--------
      CALL NUMB
      MOV NUM,BX
      ;--------
      XOR CX,CX
      MOV CX,NUM
      MOV SI,0
      lea dx,msg2
      mov ah,09h
      int 21h
      ;--------
 LOP1:LEA DX,STU+[SI]
      MOV AH,0AH
      INT 21H
      ADD SI,9
      ;--------
      CALL NUMB
      MOV STU+[SI+2],BH
      MOV STU+[SI+1],BL
      ADD SI,3
      ;--------
      LOOP LOP1
      CALL SORT
      LEA DX,MSG
      MOV AH,09H
      INT 21H
      CALL NUMB
      MOV NUM1,BX
      MOV SI,2
      MOV AX,NUM1
      DEC AX
      MOV BX,12
      MUL BX
      ADD SI,AX
      ;--------
      call output
      lea dx,result2
      mov ah,09h
      int 21h
      MOV CX,8
      MOV DI,0
     ;---------
 LOP8:
      MOV BL,BYTE PTR STU+[SI]
      cmp bl,'$'
      jz lop9
      MOV RESULT1+[DI],BL
      INC SI
      INC DI
      LOOP LOP8
 lop9:LEA DX,RESULT1
      MOV AH,09H
      INT 21H
      MOV AH,4CH
      INT 21H



NUMB PROC
     PUSH AX
     PUSH CX
     PUSH DX
     XOR DX,DX
     XOR BX,BX
     XOR CX,CX
LOP2:MOV AH,01H
     INT 21H
     CMP AL,0DH
     JZ LOP3
     SUB AL,30H
     MOV CL,AL
     MOV AX,BX
     MOV DH,10
     MUL DH
     MOV BX,AX
     ADD BX,CX
     JMP LOP2
LOP3:POP DX
     POP CX
     POP AX
     RET
NUMB ENDP

SWAP PROC
     PUSH AX
     PUSH BX
     PUSH CX
     PUSH DX
     PUSH SI
     MOV CL,10
     MOV CH,0
     MOV AX,SI
     SUB AX,10
     MOV SI,AX
LOP6:MOV AL,STU+[SI]
     XCHG AL,STU+[SI+12]
     MOV STU+[SI],AL
     INC SI
     LOOP LOP6
     POP SI
     POP DX
     POP CX
     POP BX
     POP AX
     RET
SWAP ENDP

SORT PROC
     PUSH AX
     PUSH BX
     PUSH CX
     PUSH DX
     XOR CX,CX
     XOR BX,BX
     XOR SI,SI
     MOV CX,NUM
     CLD
LOP4:
     DEC CX
     CMP CX,0
     JZ EXIT
     MOV SI,10
     MOV DI,CX
LOP5:MOV AX,WORD PTR STU+[SI]
     CMP AX,WORD PTR STU+[SI+12]
     JNL NEXT1
     XCHG AX,WORD PTR STU+[SI+12]
     MOV WORD PTR STU+[SI],AX
     CALL SWAP
     ADD SI,WORD PTR 12
NEXT1:
      DEC DI
      CMP DI,0
      JZ LOP4
      JMP LOP5
EXIT:POP DX
     POP CX
     POP BX
     POP AX
     RET
SORT ENDP

output proc
     push ax
     push bx
     push cx
     push dx
     push si
     add si,8
     mov ax,word ptr stu+[si]
     mov cx,3
     mov si,2
     mov bl,10
lop10:cmp ax,0
      jz net
      div bl
      add ah,30h
      mov result2+[si],ah
      xor ah,ah
      dec si     
      loop lop10
  net:pop si
      pop dx
      pop cx
      pop bx
      pop ax
      ret
output endp
CODE ENDS
     END START