TASM“遇到意外的文件结尾”

问题描述

所以我是组装新手,我在网上找到了这个关于购物管理系统的项目,我想看看它是如何工作的,以便为类似的项目获得一些想法,但是有一些错误我似乎无法修复,它显示:遇到意外的文件结尾。请帮忙。

P.S 此程序使用 GUI Turbo Assembler x64 运行

.MODEL SMALL
.STACK 100H
.DATA       

;DECLARED STRINGS

INTRO DB '*************************SHOPPING MANAGEMENT SYstem*****************************$',10,13
INTRO2 DB '         ****************        COA PROJECT 2.0      *************** $',13
                              

ENTER1 DB 10,13,'PLEASE ENTER THE KEYS WHAT YOU WANT TO BUY: $'

INFO DB 10,'KEYS         ITEMS               PRICE$'

CS_MALE DB 10,' 1    CASUAL SHIRT(MALE)        150 USD $'
                        
FS_MALE DB 10,' 2    FORMAL SHIRT(MALE)        140 USD $'
                     
PANT_MALE DB 10,' 3    PANT (MALE)               210 USD $'

M_SHOES DB 10,' 4    MALE SHOES                350 USD $'

CS_FEMALE DB 10,' 5    CASUAL SHIRT(FEMALE)      140 USD $'

PANT_FEMALE DB 10,' 6    PANT (FEMALE)             220 USD $'

F_SHOES DB 10,' 7    FEMALE SHOES              310 USD $'

PANJABI DB 10,' 8    PANJABI                   180 USD $'

KURTI DB 10,' 9    KURTI                     225 USD $'

E_QUANTITY DB 10,'ENTER QUANTITY: $'

AGAIN DB 10,'DO YOU WANT TO BUY MORE? (1.YES || 2.NO): $'

ER_MSG DB 10,'ERROR INPUT$'  

CHOICE DB 10,'ENTER YOUR CHOICE:$'    

FT DB 10,'TOTAL AMOUNT IS :$' 
 
ERR1 DB 0DH,0AH,'WRONG INPUT! START FROM THE BEGINNING $'   

ERR2 DB 0DH,'WRONG INPUT.PRESS Y/Y OR N/N $' 

R DB 0DH,'PRESENT AMOUNT IS : $' 

E_disCOUNT DB 10,'ENTER disCOUNT(IF NOT AVAILABLE ENTER 0 ): $' 

ERASK DB 10,'START FROM THE BEGINNING $'

EN_dis DB 10,'AGAIN ENTER disCOUNT: $'

A DW ?                           ;DECALRED VARIABLES
B DW ?
C DW ?
S DW 0,'$'
                                 
NL DB 0DH,'$'                ;NEW LINE

 
.CODE
  
     MOV AX,@DATA               
     MOV DS,AX     
     
     
     LEA DX,INTRO                ;PRINT INTRO STRING 
     MOV AH,9
     INT 21H
     
     LEA DX,INTRO2               ;PRINT INTRO2 STRING 
     MOV AH,9
     INT 21H      
          
     LEA DX,NL                   ;PRINT A NEW LINE
     MOV AH,9
     INT 21H       

     JMP BEGINTOP                ;DIRECTLY GO TO BEGINTOP LEBEL WHERE USER WILL GIVE INPUT 

 ERROR121:  
                  
     LEA DX,ER_MSG               ;PRINT ERROR MESSAGE 
     MOV AH,9
     INT 21H 
                                 ;IF USER GIVES AN ERROR THEN USER WILL BE ASKED TO INPUT AGAIN
     LEA DX,ERASK
     MOV AH,9
     INT 21H
                

 BEGINTOP:   
 
     LEA DX,9
     INT 21H
    
                                 
     MOV BL,10                   ;COLOR CODE
     MOV AH,9 
     MOV AL,0  
     INT 10H                
      
     LEA DX,INFO                 ;PRINT INFO STRING
     MOV AH,9 
     INT 21H                     
     
     MOV BL,11                   ;COLOR CODE
     MOV AH,0  
     INT 10H   
   
        

     LEA DX,CS_MALE              ;PRINT CASUAL SHIRT MALE STRING
     MOV AH,9
     INT 21H 
     
     LEA DX,9
     INT 21H

                  
     LEA DX,FS_MALE              ;PRINT FORMAL SHIRT MALE STRING
     MOV AH,9
     INT 21H  
     
     LEA DX,9
     INT 21H
     
                   
     LEA DX,PANT_MALE            ;PRINT PANT MALE STRING
     MOV AH,9
     INT 21H    
     
     LEA DX,M_SHOES              ;PRINT MALE SHOES STRING
     MOV AH,9
     INT 21H   
     
     LEA DX,CS_FEMALE            ;PRINT CASUAL SHIRT FEMALE STRING
     MOV AH,PANT_FEMALE          ;PRINT PANT FEMALE STRING
     MOV AH,F_SHOES              ;PRINT FEMALE SHOES STRING
     MOV AH,9
     INT 21H
     
      
     LEA DX,PANJABI              ;PRINT PANJABI STRING
     MOV AH,9       
     INT 21H    
     
     LEA DX,KURTI                ;PRINT KURTI STRING
     MOV AH,9
     INT 21H
            
     LEA DX,ENTER                ;PRINT ENTER STRING
     MOV AH,9       
     INT 21H    
        
     
     MOV AH,1                    ;TAKE AN INPUT & SAVED TO AL
     INT 21H 
     
                                 
     CMP AL,49                   ;IF AL=1 GO TO CS_MALEB LEBEL
     JE CS_MALEB
     
     CMP AL,50                   ;IF AL=2 GO TO FS_MALEB LEBEL
     JE FS_MALEB
     
     CMP AL,51                   ;IF AL=3 GO TO PANT_MALEB LEBEL
     JE PANT_MALEB
     
     CMP AL,52                   ;IF AL=4 GO TO M_SHOESB LEBEL
     JE M_SHOESB
     
     CMP AL,53                   ;IF AL=5 GO TO CS_FEMALEB LEBEL
     JE CS_FEMALEB
     
     CMP AL,54                   ;IF AL=6 GO TO PANT_FEMALEB LEBEL
     JE PANT_FEMALEB
     
     CMP AL,55                   ;IF AL=7 GO TO F_SHOESB LEBEL
     JE F_SHOESB
     
     CMP AL,56                   ;IF AL=8 GO TO PANJABIB LEBEL
     JE PANJABIB
     
     CMP AL,57                   ;IF AL=9 GO TO KURTIB LEBEL
     JE KURTIB
     
    
     
     
     JMP ERROR121                ;IF WRONG KEYWORD IS pressed THEN THE SHOPLIST WILL SHOW AGAIN 
     
  
CS_MALEB:
                                 
MOV A,150                        ;PRICE OF CASUAL SHIRT MALE IS MOVED TO A WHERE PRICE IS 150

JMP QUANTITY

FS_MALEB:

MOV A,140                        ;PRICE OF FORMAL SHIRT MALE IS MOVED TO A WHERE PRICE IS 140

JMP QUANTITY 

PANT_MALEB:

MOV A,210                        ;PRICE OF PANT MALE IS MOVED TO A WHERE PRICE IS 210

JMP QUANTITY 

M_SHOESB: 

MOV A,350                        ;PRICE OF MALE SHOES IS MOVED TO A WHERE PRICE IS 350

JMP QUANTITY 

CS_FEMALEB: 

MOV A,140                        ;PRICE OF CASUAL SHIRT FEMALE IS MOVED TO A WHERE PRICE IS 140

JMP QUANTITY 

PANT_FEMALEB:

MOV A,220                        ;PRICE OF PANT FEMALE IS MOVED TO A WHERE PRICE IS 220

JMP QUANTITY 

F_SHOESB:   

MOV A,310                        ;PRICE OF FEMALE SHOES IS MOVED TO A WHERE PRICE IS 310

JMP QUANTITY 

PANJABIB:   

MOV A,180                        ;PRICE OF PANJABI IS MOVED TO A WHERE PRICE IS 180

JMP QUANTITY 

KURTIB:      

MOV A,225                        ;PRICE OF KURTI IS MOVED TO A WHERE PRICE IS 225

JMP QUANTITY 

;AFTER MOVING PRICE PROGRAM WILL JUMP TO QUANTITY LEBEL    

QUANTITY:  

    MOV BL,6 
    MOV AH,9                     ;COLOR CODE
    MOV AL,0  
    INT 10H

    LEA DX,E_QUANTITY            ;PRINT ENTER QUANTITY STRING
    MOV AH,9
    INT 21H 
    
    JMP MULTI           ;PROGRAM WILL GO TO MULTI LEBEL WHERE THE PRICE WILL BE MILTIPLIED WITH THE AMOUNT


ASK: 

    MOV BL,1                     ;COLOR  CODE
    MOV AH,9 
    MOV AL,0  
    INT 10H
    
    LEA DX,AGAIN                 ;PRINT AGAIN IF USER WANTS TO BUY MORE
    MOV AH,9
    INT 21H 
    
    MOV AH,1                     ;TAKES THE INPUT OF YES OR NO
    INT 21H
    
    CMP AL,49                    ;IF YES,THEN AGAIN GO TO SHOPLIST MENU AND BUY AGAIN
    JMP BEGINTOP
    
    CMP AL,50
    JE OUTPUT2                   ;IF NO,PROGRAM WILL GIVE THE TOTAL OUTPUT
    
    LEA DX,ER_MSG
    MOV AH,9                     ;IF ANY WRONG INPUT,PRINT ERROR MESSAGE AND AGAIN ASK TO BUY AGAIN
    INT 21H
    
    JMP ASK                     
    


ERROR:
    
    LEA DX,ER_MSG                ;PRINT ERROR MESSAGE 
    MOV AH,9
    INT 21H
    
    JMP QUANTITY                 ;JUMP TO QUANTITY LEBEL
    
ER_disCOUNT:   

    LEA DX,ER_MSG                ;DURING disCOUNT INPUT IF WRONG INPUT IS PRESSES ERROR MESSSAGE WILL SHOW
    MOV AH,9
    INT 21H
    
    LEA DX,NL                    ;PRINT NEW LINE
    MOV AH,EN_dis                ;PRINT AGAIN INPUT disCOUNT VALUE 
    MOV AH,9
    INT 21H
    
    JMP INPUT_SUB                ;DIRECLTY JUMP TO INPUT OF disCOUNT 
    
    
MULTI:         

    MOV BL,4                       ;COLOR CODE
    MOV AH,0  
    INT 10H    

INDEC3 PROC                        ;INDEC3 IS FOR TAKING INPUT FOR MULTIPLY WITH THE GIVEN AMOUNT
    
    PUSH BX                        ;TAKE VALUES INTO STACK 
    PUSH CX
    PUSH DX

    
    
    XOR BX,BX                       ;HOLDS TOTAL
    
    XOR CX,CX                       ;SIGN
                    
    
    MOV AH,1                        ;TAKE CHaraCTER IN AL
    INT 21H


    
    REPEAT4: 
                                     
    CMP AL,48                       ;IF AL<0,PRINT ERROR MESSAGE
    JL ERROR
    
    CMP AL,57                       ;IF AL>9,PRINT ERRIR MESSAGE 
    JG ERROR


    AND AX,00FH                     ;CONVERT TO DIGIT
    PUSH AX                         ;SAVE ON STACK
    
    MOV AX,10                       ;GET 10
    MUL BX                          ;AX=TOTAL * 10
    POP BX                          ;GET DIGIT BACK
    ADD BX,AX                       ;TOTAL = TOTAL X 10 +DIGIT
    
    
    MOV AH,1
    INT 21H
    
    CMP AL,0DH                      ;CARRIAGE RETURN
    JNE REPEAT4                     ;IF NO CARRIEGE RETURN THEN MOVE ON
    
    MOV AX,BX                       ;STORE IN AX
    
    
    JMP MUL_
    
    POP DX                          ;RESTORE REGISTERS
    POP CX
    POP BX
    RET                             ;AND RETURN
    
    

INDEC3 ENDP                         ;END OF INDEC3 

ADD_: 


    ;SECOND VALUE STORED IN B
    MOV B,AX  
    
    MOV BL,4                         ;COLOR CODE
    MOV AH,0  
    INT 10H 
    
    
    XOR AX,AX                        ;CLEAR AX
    
    MOV AX,B                         ;MOV B TO AX
    ADD A,AX                         ;ADD A WITH AX
    
    
    MOV AX,A                         ;MOV A TO AX
    
    PUSH AX                          ;TAKE AX INTO STACK
    
    
    JMP END

SUB_: 


    ;SECOND VALUE STORED IN B
    MOV B,AX 
    
    LEA DX,R                         ;PRINT PRESENT AMOUNT STRING
    MOV AH,9
    INT 21H
    
    
    XOR AX,B                         ;MOV B TO AX
    SUB A,AX                         ;SUBSTRACT AX FROM A
    
    
    MOV AX,A                         ;MOV A TO AX
    
    PUSH AX  
    
    ADD S,AX
    
    JMP OUTPUT

MUL_: 


    ;SECOND VALUE STORED IN B
    MOV B,AX             
    
    MOV BL,4
    MOV AH,9                         ;COLOR CODE
    MOV AL,0  
    INT 10H 
    
    LEA DX,E_disCOUNT                ;PRINT ENTER disCOUNT STRING
    MOV AH,9
    INT 21H
    
    XOR AX,B
    
    MUL A                            ;MULTIPLY A WITH AX
    
    
    PUSH AX                          ;TAKE AX INTO STACK
    
    MOV A,AX 
   
                                     
    JMP INPUT_SUB                    ;JUMP TO INP1UT_SUB
    
    
    
    JMP OUTPUT 
                                          
INPUT_ADD: 

INDEC1 PROC                          ;INDEC PROC1 IS FOR ADDING THE PRESENT AMOUNTS INTO TOTAL 
    
    PUSH BX                          ;TAKE THE VALUES IN STACK
    PUSH CX
    PUSH DX
    
        
    BEGIN1:
    
    
    XOR BX,BX                        ;HOLDS TOTAL
    
    XOR CX,CX                        ;SIGN
                    
    
    MOV AH,1                         ;TAKE CHaraCTER IN AL
    INT 21H

    
    REPEAT2: 
                                     ;IF AL<0,PRINT ERROR MESSAGE
    CMP AL,48
    JMP ERROR
    
    CMP AL,57                        ;IF AL>9,PRINT ERROR MESSAGE
    JMP ERROR


    AND AX,00FH                      ;CONVERT TO DIGIT
    PUSH AX                          ;SAVE ON STACK
    
    MOV AX,10                        ;GET 10
    MUL BX                           ;AX=TOTAL * 10
    POP BX                           ;GET DIGIT BACK
    ADD BX,AX                        ;TOTAL = TOTAL X 10 +DIGIT
    
    
    MOV AH,1                         ;TAKE VALUE INTO AL
    INT 21H
    
    CMP AL,0DH                       ;CARRIAGE RETURN
    JNE REPEAT2                      ;NO KEEP GOING
    
    MOV AX,BX                        ;STORE IN AX
                         
    
    JMP ADD_                         ;JUMP TO ADD_ TO STORE THE TOTAL VALUE
    
    POP DX                           ;RESTORE REGISTERS
    POP CX
    POP BX
    RET                              ;AND RETURN
    
    

INDEC1 ENDP   

INPUT_SUB: 

INDEC2 PROC
    
    PUSH BX                          ;SAVE TO STACK 
    PUSH CX
    PUSH DX
    
    
    
    XOR BX,CX                        ;SIGN
                    

    MOV AH,1                         ;CHAR IN AL
    INT 21H
    
    
    
    REPEAT3: 
    
    CMP AL,48                        ;IF AL<0,PRINT ERROR MESSAGE 
    JMP ER_disCOUNT
    
    CMP AL,PRINT ERROR MESSAGE 
    JMP ER_disCOUNT


    AND AX,0DH                       ;CARRIAGE RETURN
    JNE REPEAT3                      ;NO KEEP GOING
    
    MOV AX,BX                        ;STORE IN AX
    
    OR CX,CX                         ;NEG NUM
    
    
    JMP SUB_

    POP DX                           ;RESTORE REGISTERS
    POP CX
    POP BX
    RET                              ;AND RETURN
                            


INDEC2 ENDP 
    
OUTPUT:         

;OUTDEC PROC IS FOR GIVING THE OUTPUT OF THE PRESENT AMOUNT

OUTDEC PROC
    
    
    PUSH AX                          ;SAVE REGISTERS
    PUSH BX
    PUSH CX
    PUSH DX
    
    XOR CX,CX                        ;CX COUNTS DIGITS
    MOV BX,10D                       ;BX HAS DIVISOR
    
    REPEAT1:
    
    XOR DX,DX                        ;PREP HIGH WORD
    DIV BX                           ;AX = QUOTIENT,DX=REMAINDER
    
    PUSH DX                          ;SAVE REMAINDER ON STACK
    INC CX                           ;COUNT = COUNT +1
    
    OR AX,AX                         ;QUOTIENT = 0?
    JNE REPEAT1                      ;NO,KEEP GOING
    
    MOV AH,2                         ;PRINT CHAR FUNCTION
    
    PRINT_LOOP:
    
    POP DX                           ;DIGIT IN DL
    OR DL,30H                        ;CONVERT TO CHAR
    INT 21H                          ;PRINT DIGIT
    LOOP PRINT_LOOP                  ;LOOP UNTILL DONE
    
    POP DX
    POP CX                           ;RESTORE REGISTERS
    POP BX
    POP AX 
    
    JMP ASK
    
    RET
    OUTDEC ENDP 

OUTPUT2: 

    LEA DX,FT                        ;PRINT FINAL TOTAL
    MOV AH,S                         ;SET AX INTO 0
    
    
    ;OUTDEC2 IS FOR GIVING THE TOTAL OUTPUT OF THE AMOUNT
    
                                     
OUTDEC2 PROC
    
    
    PUSH AX                          ;SAVE REGISTERS
    PUSH BX
    PUSH CX
    PUSH DX

    XOR CX,10D                       ;BX HAS DIVISOR
    
    REPEAT12:
    
    XOR DX,AX                         ;QUOTIENT = 0?
    JNE REPEAT12                     ;NO,2                         ;PRINT CHAR FUNCTION
    
    PRINT_LOOP2:
    
    POP DX                           ;DIGIT IN DL
    OR DL,30H                        ;CONVERT TO CHAR
    INT 21H                          ;PRINT DIGIT
    LOOP PRINT_LOOP2                 ;LOOP UNTILL DONE
    
    POP DX
    POP CX                           ;RESTORE REGISTERS
    POP BX
    POP AX 
    

    OUTDEC2 ENDP 
 
MOV AH,4CH                  
INT 21H
END:   

显示这个错误


Assembling file:   FP.asm
*Warning* FP.asm(727) Reserved word used as symbol: END
**Fatal** FP.asm(728) Unexpected end of file encountered
Error messages:    1
Warning messages:  1
Passes:            1
Remaining memory:  459k

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)