问题描述
所以我是组装新手,我在网上找到了这个关于购物管理系统的项目,我想看看它是如何工作的,以便为类似的项目获得一些想法,但是有一些错误我似乎无法修复,它显示:遇到意外的文件结尾。请帮忙。
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 (将#修改为@)