+ -
当前位置:首页 → 问答吧 → 用MASMPLUS编译器编译的程序错误

用MASMPLUS编译器编译的程序错误

时间:2011-12-24

来源:互联网

编译器是masmplus
下面程序错误出现在:NO DB 10 DUP('')这一句 
求改正?

程序如下:
STUDENT STRUCT
  NO DB 10 DUP('')
  NAME DB 8 DUP('')
  SCORE DB ' '
STUDENT ENDS

DATA SEGMENT
  MAX EQU 10
  S1 STUDENT MAX DUP(<>)
  COUNT DW 0
  FILENAME DB 'SCORE.TXT',0
  HANDLE DW ?
  ERROR DB 'A ERROR COME UP',0DH,0AH,'$'
  TISHI DB 'Please type the students information:',0DH,0AH,'$'
  ID DB 0DH,0AH,'enter student number:','$'
  TXT DB 0DH,0AH,'enter name:','$'
  MARK DB 0DH,0AH,'enter score:','$'
  WHETH DB 0DH,0AH,'Continue? Y=continue,N=finish.'0DH,0AH, '$'

  BUF DB 11
  NUMBER DB 0
  CHARS DB 11 DUP(0)

  HEADING db 0dh,0ah,'======================================',0dh,0ah
  db 'id',9,9,'name',9,9,'score',0dh,0ah,'$'

  FLAG DW 0FFFFH
  SORT_SCORE DW MAX DUP(0)

DATA ENDS

CODE SEGMENT 
  ASSUME CS:CODE,DS:DATA

START:
  MOV AX,DATA
  MOV DX,AX
 
  MOV DX,OFFSET TISHI
  MOV AX,09H
  INT 21H
   
  MOV DI,OFFSET S1
  MOV CX,MAX
 L1:
  PUSH CX
  MOV DX,OFFSET ID
  MOV AX,09H
  INT 21H
  MOV [BUF],11
  MOV DX,OFFSET BUF
  MOV AH,0AH
  INT 21H
  CALL COPY
  MOV DX,OFFSET TXT
  MOV AH,09H
  INT 21H
  MOV [BUF],9
  MOV DX,OFFSET BUF
  MOV AH,0AH
  INT 21H
  ADD DI,10
  CALL COPY
  MOV DX,OFFSET MARK
  MOV AH,09H
  INT 21H
  MOV [BUF],4
  MOV DX,OFFSET BUF
  MOV AH,0AH
  INT 21H
  ADD DI,8
  MOV [DI],AL
  INC COUNT
   
  CALL ASK
  JC QUIT
   
  ADD DI,1
  POP CX
  LOOP L1
   
 L2:
  CALL SORT
  MOV DX,OFFSET HEADING
  MOV AH,09H
  INT 21H
   
  MOV CX,COUNT
  MOV DI,OFFSET SORT_SCORE
 AGAIN:
  PUSH CX
  MOV BX,[DI]
  XOR SI,SI
  MOV AH,02H
  MOV CX,10
  N:  
  MOV DI,(STUDENT PTR[BX]).NO[SI]
  INT 21H
  INC SI
  LOOP N

  CALL TAB
  XOR SI,SI
  MOV AH,02H
  MOV CX,8
  T:  
  MOV DI,(STUDENT PTR [BX]).NAME[SI]
  INT 21H
  INC SI
  LOOP T

  CALL TAB
  MOV AH,00H
  MOV AL,(STUDENT PTR [BX]).SCORE
  MOV AX,BX
  MOV BX,10
  XOR CX,CX
 L3:
  XOR DX,DX
  DIV BX
  PUSH DX
  INC CX
  CMP AX,0
  JNZ L3
 L4:
  POP DX
  ADD DL,'0'
  MOV AH,02H
  INT 21H
  LOOP L4

  MOV AH,02H
  MOV DL,0DH
  INT 21H
  MOV AH,02H
  MOV DL,0AH
  INT 21H

  INC DI
  INC DI
  POP CX
  LOOP AGAIN

  MOV AH,3CH
  MOV DX,OFFSET FILENAME
  INT 21H
  JC L5
  MOV HANDLE,AX
  XOR DX,DX
  MOV CX,AX
  MOV AH,40H
  MOV BX,[HANDLE]
  MOV DX,OFFSET S1
  INT 21H
  JC L5
  MOV AH,3EH
  MOV BX,[HANDLE]
  INT 21H
 QUIT:
  MOV AH,4CH
  INT 21H
 L5:
  MOV DX,OFFSET ERROR
  MOV AH,09H
  INT 21H
  JMP QUIT

COPY PROC
  PUSH SI
  PUSH DI
  PUSH CX
   
  MOV SI,OFFSET CHARS
  XOR CX,CX
  MOV CL,NUMBER
  REP MOVSB
   
  POP CX
  POP DI
  POP SI
  RET
COPY ENDP

SORT PROC
  PUSH AX
  PUSH BX
  PUSH SI
  PUSH DI
   
  MOV BX,OFFSET S1
  MOV DI,OFFSET SORT_SCORE
  MOV CX,COUNT
 L6:
  MOV AL,(STUDENT PTR [BX]).SCORE
  CALL INSERT
  ADD BX,19
  ADD DI,2
  LOOP L6
   
  POP DI
  POP SI
  POP BX
  POP AX
  RET
SORT ENDP

INSERT PROC
  PUSH BX
  PUSH DX
  PUSH DI
   
  MOV DX,BX
 L7:
  MOV BX,[DI-2]
  CMP BX,0FFFFH
  JNZ L8
  MOV [DI],DX
  JMP L10
 L8:
  CMP AL,(STUDENT PTR [BX]).SCORE
  JA L9
  MOV [DI],DX
  JMP L10
 L9:
  MOV [DI],BX
  SUB DI,2
  JMP L7
 L10:
  POP DI
  POP DX
  POP BX
  RET
INSERT ENDP

ASK PROC 
  PUSH DX
  PUSH AX
   
  MOV DX,OFFSET WHETH
  MOV AH,09H
  INT 21H
  MOV AH,01H
  INT 21H
  CMP AL,'Y'
  JZ L11
  CMP AL,'y'
  JZ L11
  JMP L12
 L11:
  CLC
  JMP L13
 L12:
  STC
 L13:
  POP AX
  POP DX
  RET
ASK ENDP

TAB PROC
  PUSH AX
  PUSH DX
  MOV AH,02H
  MOV DL,9
  INT 21H
  POP DX
  POP AX
  RET
TAB ENDP
 END START

作者: alived_s   发布时间: 2011-12-24

把变量名字换一下。

作者: mydo   发布时间: 2011-12-24