主题:[原创]请高手看一下,很急的!
下面是一个学生成绩管理程序,编译是没有出错的,但运行不对,请各位高手帮忙看一下是哪里的问题?谢谢!
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
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