Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TITLE ASSIGNMENT COUNT FUNCTION ; TITLE directive
- .MODEL SMALL ; declare the memory model used(SMALL)
- .STACK 64 ; delcare STACK segment
- .DATA ; declare DATA segment
- RFLOWER DW 10
- RFLOWER1 DW 10 ; declare total remain flower type
- RFLOWER2 DW 10
- YFLOWER DW 20
- YFLOWER1 DW 30 ; declare total yesterday flower type
- YFLOWER2 DW 20
- SFLOWER DW 10
- SFLOWER1 DW 10 ; declare total sales flower type
- SFLOWER2 DW 30
- REMAIN DW ?
- SMESSAGE DB 'Total Sales Bird of Paradise (Strelitzia reginae) : $'
- SMESSAGE1 DB 'Total Sales Sunflower (Helianthus) : $' ; Total count amount of type of flower
- SMESSAGE2 DB 'Total Sales Balsam (Impatiens balsamina) : $'
- RMESSAGE DB 'Total Remain Bird of Paradise (Strelitzia reginae) : $'
- RMESSAGE1 DB 'Total Remain Sunflower (Helianthus) : $' ; Remain count amount of type of flower
- RMESSAGE2 DB 'Total Remain Balsam (Impatiens balsamina) : $'
- YMESSAGE DB 'Total Yesterday Bird of Paradise (Strelitzia reginae) : $'
- YMESSAGE1 DB 'Total Yesterday Sunflower (Helianthus) : $' ; Total Yesterday count amount of type of flower
- YMESSAGE2 DB 'Total Yesterday Balsam (Impatiens balsamina) : $'
- MENU DB 'Please Select the type of flower that need to check the amount. $'
- LINE DB '----------------------------------------------- $'
- MENU2 DB '1. Bird of Paradise (Strelitzia reginae) $'
- MENU3 DB '2. Sunflower (Helianthus) $' ; Menu list
- MENU4 DB '3. Balsam (Impatiens balsamina) $'
- MENU5 DB '4. Exit $'
- INPUTP DB 'Please enter the type of flower that need to check (1, 2, 3, 4) >> $ ' ; Input place
- INPUT DB ? ; Input
- DIVISOR DB 10
- ERROR DB 'Warning, Incorrect Flower type ! $'
- ERRORCHECK DB 'Warning, Incorrect Input ! $ '
- CONTINUECHECK DB 'Do you continue with this system function ? (Y/N) >> $'
- CCHECK DB ?
- COMFIRM DB 'Are you confirm to continue this function for this type of flower counting ? (Y/N) >> $'
- CCOMFIRM DB ?
- EXITMESSAGE DB 'Exit Counting system Success ! $'
- CORRECTMESSAGE DB 'The total amount of flower is correct ! $'
- CORRECTMESSAGE1 DB 'The total flower that today have sales is $ '
- CALCULATIONERROR DB 'The amount of today sales flower is invalid ! $'
- CALCULATIONERROR1 DB 'System will auto corrected the today sales amount . $'
- CALCULATIONERROR2 DB 'The amount of today sales is $'
- ;
- .CODE
- NEXTLINE PROC FAR ; Function to create a new line
- MOV AH, 02H
- MOV DL, 0DH
- INT 21H
- MOV DL, 0AH
- INT 21H
- RET
- NEXTLINE ENDP ; declare CODE segment
- ; Procedure to display digit.
- ; https://stackoverflow.com/questions/45904075/displaying-numbers-with-dos
- DISDIG PROC FAR
- mov bx,10 ;CONST
- xor cx,cx ;Reset counter
- .a: xor dx,dx ;Setup for division DX:AX / BX
- div bx ; -> AX is Quotient, Remainder DX=[0,9]
- push dx ;(1) Save remainder for now
- inc cx ;One more digit
- test ax,ax ;Is quotient zero?
- jnz .a ;No, use as next dividend
- .b: pop dx ;(1)
- add dl,"0" ;Turn into character [0,9]
- mov ah,02h ;DOS.DisplayCharacter
- int 21h ; -> AL
- loop .b
- RET
- DISDIG ENDP
- MAIN PROC FAR ; MAIN procedure
- MOV AX , @DATA
- MOV DS , AX
- START :
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , MENU
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , LINE
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , MENU2
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , MENU3
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , MENU4 ; Display flower list.
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , MENU5 ; Display flower list.
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H ; Let user input to choose the type flower
- LEA DX , INPUTP
- INT 21H
- INPUTPLACE:
- MOV AH , 01H
- INT 21H ; Input place
- MOV INPUT, AL
- CALL NEXTLINE
- CMP INPUT , 31H ; Check Validation of input. (31H : 1, 32H : 2, 33H : 3)
- JE CONTINUE11
- CMP INPUT , 32H
- JE CONTINUE21
- CMP INPUT , 33H
- JE CONTINUE31
- CMP INPUT , 34H
- JE EXIT1
- EXIT1 :
- JMP EXIT
- CONTINUE11 :
- JMP CONTINUE1
- CONTINUE31 :
- JMP CONTINUE3
- CONTINUE21 :
- JMP CONTINUE2
- MOV AH , 09H
- LEA DX , ERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- JMP START
- CONTINUE1 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , LINE
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , YMESSAGE
- INT 21H
- MOV AX , YFLOWER
- CALL DISDIG
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , SMESSAGE
- INT 21H
- MOV AX , SFLOWER
- CALL DISDIG
- CALL NEXTLINE
- MOV AH , 02H
- MOV DL , LINE
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , COMFIRM
- INT 21H
- MOV AH , 01H
- INT 21H ; Input place
- MOV CCOMFIRM , AL
- JE CONFIRM
- CONFIRM:
- MOV AH, 01H
- INT 21H
- MOV CCOMFIRM, AL
- CMP AL, 'n' ;N ; Validation: Check if user type Y or N.
- JE START01
- CMP AL, 'Y' ;Y
- JE CALCULATION11
- CMP AL, 'N' ;N ; Validation: Check if user type y or n.
- JE START01
- CMP AL, 'y' ;Y
- JMP CALCULATION11
- CALCULATION11 :
- JMP CALCULATION1
- START01 :
- JMP START
- MOV AH , 09H
- LEA DX , ERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- JMP CONTINUE1
- CONTINUE2 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , YMESSAGE1
- INT 21H
- MOV AX , YFLOWER1
- CALL DISDIG
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , SMESSAGE1
- INT 21H
- MOV AX , SFLOWER1
- CALL DISDIG
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , COMFIRM
- INT 21H
- MOV AH , 01H
- INT 21H ; Input place
- MOV CCOMFIRM , AL
- CMP CCOMFIRM , 'N'
- JE START3
- CMP CCOMFIRM , 'n'
- JE START3 ; check if y and Y go to CALCULATION
- CMP CCOMFIRM , 'Y'
- JE CALCULATION2A
- CMP CCOMFIRM , 'y'
- JE CALCULATION2A ; check if n and N go to Input place
- CALCULATION2A :
- JMP CALCULATION2
- START3 :
- JMP START
- MOV AH , 09H
- LEA DX , ERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- JE CONTINUE2A
- CONTINUE2A:
- JMP CONTINUE2
- CONTINUE3 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , YMESSAGE2
- INT 21H
- MOV AX , YFLOWER2
- CALL DISDIG
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , SMESSAGE2
- INT 21H
- MOV AX , SFLOWER2
- CALL DISDIG
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , COMFIRM
- INT 21H
- MOV AH , 01H
- INT 21H ; Input place
- MOV CCOMFIRM , AL
- CMP CCOMFIRM , 'n'
- JE START4
- CMP CCOMFIRM , 'N'
- JE START4
- CMP CCOMFIRM , 'Y'
- JE CALCULATION32 ; check if y and Y go to CALCULATION
- CMP CCOMFIRM , 'y'
- JE CALCULATION32
- CALCULATION32 :
- JMP CALCULATION3
- START4 :
- JMP START
- MOV AH , 09H
- LEA DX , ERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- JE CONTINUE33
- CONTINUE33 :
- JMP CONTINUE3
- CALCULATION1 :
- MOV AX, YFLOWER
- SUB AX, RFLOWER ; YFLOWER - RFLOWER = RFLOWER
- MOV RFLOWER, AX
- MOV AX, RFLOWER
- MOV BX, SFLOWER
- CMP AX, BX ; CHECK THE SALES AND REMAIN IS SAME OR NOT <-- PROBLEM, TEACHER SAY MOV TO REGISTER FIRST BUT DON KNOW HOW..
- JE CORRECT1
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR1
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR2
- INT 21H
- MOV AX , SFLOWER2
- CALL DISDIG
- CONFIRMEXIT1 :
- JMP CONFIRMEXIT
- CORRECT1 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE1
- INT 21H
- MOV AX, SFLOWER
- CALL DISDIG
- JE CONFIRMEXIT01
- CONFIRMEXIT01:
- JMP CONFIRMEXIT
- CALCULATION2 :
- MOV AX , YFLOWER1 ;Y - R = R
- SUB AX, RFLOWER1
- MOV RFLOWER1, AX
- MOV BX, SFLOWER1
- CMP AX , BX ;S == R ?
- JE CORRECT2
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR1
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR2
- INT 21H
- MOV AX , SFLOWER2
- CALL DISDIG
- JMP CONFIRMEXIT
- CORRECT2 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE1
- INT 21H
- MOV AX, SFLOWER1
- CALL DISDIG
- JE CONFIRMEXIT
- CALCULATION3 :
- MOV AX , YFLOWER2
- SUB RFLOWER2 , AX
- CMP AX , SFLOWER2
- JE CORRECT3
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR
- INT 21H
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR1
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX ,CALCULATIONERROR2
- INT 21H
- MOV AX , SFLOWER2
- CALL DISDIG
- CORRECT3 :
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE
- INT 21H
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CORRECTMESSAGE1
- INT 21H
- MOV AX, SFLOWER2
- CALL DISDIG
- JMP CONFIRMEXIT
- CONFIRMEXIT :
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , CONTINUECHECK
- INT 21H
- MOV AH , 01H
- INT 21H ; Input place
- MOV CCHECK , AL
- CALL NEXTLINE
- CMP CCHECK , 'y'
- JNE Exit001
- JMP START
- CMP CCHECK , 'Y'
- JNE Exit001
- JMP START
- ; check if y and Y return back to star
- Exit001:
- CMP CCHECK , 'N'
- JMP START
- CMP CCHECK , 'n'
- JMP START ; check if n and N go to EXIT
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , ERRORCHECK
- INT 21H
- CALL NEXTLINE
- JMP CONFIRMEXIT
- EXIT :
- CALL NEXTLINE
- CALL NEXTLINE
- MOV AH , 09H
- LEA DX , EXITMESSAGE
- INT 21H
- MOV AX , 4C00H
- INT 21H
- MAIN ENDP
- END MAIN
Add Comment
Please, Sign In to add comment