Looz_Dreemur

Untitled

Sep 9th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.54 KB | None | 0 0
  1. TITLE ASSIGNMENT COUNT FUNCTION ; TITLE directive
  2.  
  3. .MODEL SMALL ; declare the memory model used(SMALL)
  4. .STACK 64 ; delcare STACK segment
  5. .DATA ; declare DATA segment
  6.  
  7. RFLOWER DW 10
  8. RFLOWER1 DW 10 ; declare total remain flower type
  9. RFLOWER2 DW 10
  10.  
  11. YFLOWER DW 20
  12. YFLOWER1 DW 30 ; declare total yesterday flower type
  13. YFLOWER2 DW 20
  14.  
  15. SFLOWER DW 10
  16. SFLOWER1 DW 10 ; declare total sales flower type
  17. SFLOWER2 DW 30
  18. REMAIN DW ?
  19.  
  20. SMESSAGE DB 'Total Sales Bird of Paradise (Strelitzia reginae) : $'
  21. SMESSAGE1 DB 'Total Sales Sunflower (Helianthus) : $' ; Total count amount of type of flower
  22. SMESSAGE2 DB 'Total Sales Balsam (Impatiens balsamina) : $'
  23.  
  24. RMESSAGE DB 'Total Remain Bird of Paradise (Strelitzia reginae) : $'
  25. RMESSAGE1 DB 'Total Remain Sunflower (Helianthus) : $' ; Remain count amount of type of flower
  26. RMESSAGE2 DB 'Total Remain Balsam (Impatiens balsamina) : $'
  27.  
  28. YMESSAGE DB 'Total Yesterday Bird of Paradise (Strelitzia reginae) : $'
  29. YMESSAGE1 DB 'Total Yesterday Sunflower (Helianthus) : $' ; Total Yesterday count amount of type of flower
  30. YMESSAGE2 DB 'Total Yesterday Balsam (Impatiens balsamina) : $'
  31.  
  32. MENU DB 'Please Select the type of flower that need to check the amount. $'
  33. LINE DB '----------------------------------------------- $'
  34. MENU2 DB '1. Bird of Paradise (Strelitzia reginae) $'
  35. MENU3 DB '2. Sunflower (Helianthus) $' ; Menu list
  36. MENU4 DB '3. Balsam (Impatiens balsamina) $'
  37. MENU5 DB '4. Exit $'
  38.  
  39. INPUTP DB 'Please enter the type of flower that need to check (1, 2, 3, 4) >> $ ' ; Input place
  40.  
  41. INPUT DB ? ; Input
  42.  
  43. DIVISOR DB 10
  44.  
  45. ERROR DB 'Warning, Incorrect Flower type ! $'
  46. ERRORCHECK DB 'Warning, Incorrect Input ! $ '
  47.  
  48. CONTINUECHECK DB 'Do you continue with this system function ? (Y/N) >> $'
  49. CCHECK DB ?
  50.  
  51. COMFIRM DB 'Are you confirm to continue this function for this type of flower counting ? (Y/N) >> $'
  52. CCOMFIRM DB ?
  53.  
  54. EXITMESSAGE DB 'Exit Counting system Success ! $'
  55.  
  56. CORRECTMESSAGE DB 'The total amount of flower is correct ! $'
  57. CORRECTMESSAGE1 DB 'The total flower that today have sales is $ '
  58.  
  59. CALCULATIONERROR DB 'The amount of today sales flower is invalid ! $'
  60. CALCULATIONERROR1 DB 'System will auto corrected the today sales amount . $'
  61. CALCULATIONERROR2 DB 'The amount of today sales is $'
  62.  
  63. ;
  64.  
  65. .CODE
  66.  
  67. NEXTLINE PROC FAR ; Function to create a new line
  68.  
  69. MOV AH, 02H
  70. MOV DL, 0DH
  71. INT 21H
  72. MOV DL, 0AH
  73. INT 21H
  74. RET
  75.  
  76. NEXTLINE ENDP ; declare CODE segment
  77.  
  78. ; Procedure to display digit.
  79. ; https://stackoverflow.com/questions/45904075/displaying-numbers-with-dos
  80.  
  81. DISDIG PROC FAR
  82. mov bx,10 ;CONST
  83. xor cx,cx ;Reset counter
  84. .a: xor dx,dx ;Setup for division DX:AX / BX
  85. div bx ; -> AX is Quotient, Remainder DX=[0,9]
  86. push dx ;(1) Save remainder for now
  87. inc cx ;One more digit
  88. test ax,ax ;Is quotient zero?
  89. jnz .a ;No, use as next dividend
  90. .b: pop dx ;(1)
  91. add dl,"0" ;Turn into character [0,9]
  92. mov ah,02h ;DOS.DisplayCharacter
  93. int 21h ; -> AL
  94. loop .b
  95. RET
  96. DISDIG ENDP
  97.  
  98. MAIN PROC FAR ; MAIN procedure
  99.  
  100. MOV AX , @DATA
  101. MOV DS , AX
  102.  
  103. START :
  104.  
  105. CALL NEXTLINE
  106. CALL NEXTLINE
  107. MOV AH , 09H
  108. LEA DX , MENU
  109. INT 21H
  110.  
  111. CALL NEXTLINE
  112. MOV AH , 09H
  113. LEA DX , LINE
  114. INT 21H
  115.  
  116. CALL NEXTLINE
  117. MOV AH , 09H
  118. LEA DX , MENU2
  119. INT 21H
  120.  
  121. CALL NEXTLINE
  122. MOV AH , 09H
  123. LEA DX , MENU3
  124. INT 21H
  125.  
  126. CALL NEXTLINE
  127. MOV AH , 09H
  128. LEA DX , MENU4 ; Display flower list.
  129. INT 21H
  130.  
  131. CALL NEXTLINE
  132. MOV AH , 09H
  133. LEA DX , MENU5 ; Display flower list.
  134. INT 21H
  135. CALL NEXTLINE
  136.  
  137. CALL NEXTLINE
  138. MOV AH , 09H ; Let user input to choose the type flower
  139. LEA DX , INPUTP
  140. INT 21H
  141.  
  142. INPUTPLACE:
  143.  
  144. MOV AH , 01H
  145. INT 21H ; Input place
  146. MOV INPUT, AL
  147. CALL NEXTLINE
  148.  
  149. CMP INPUT , 31H ; Check Validation of input. (31H : 1, 32H : 2, 33H : 3)
  150. JE CONTINUE11
  151.  
  152. CMP INPUT , 32H
  153. JE CONTINUE21
  154.  
  155. CMP INPUT , 33H
  156. JE CONTINUE31
  157.  
  158. CMP INPUT , 34H
  159. JE EXIT1
  160.  
  161. EXIT1 :
  162. JMP EXIT
  163.  
  164. CONTINUE11 :
  165. JMP CONTINUE1
  166.  
  167. CONTINUE31 :
  168. JMP CONTINUE3
  169.  
  170. CONTINUE21 :
  171. JMP CONTINUE2
  172.  
  173. MOV AH , 09H
  174. LEA DX , ERROR
  175. INT 21H
  176. CALL NEXTLINE
  177. CALL NEXTLINE
  178.  
  179. JMP START
  180.  
  181. CONTINUE1 :
  182.  
  183. CALL NEXTLINE
  184. MOV AH , 09H
  185. LEA DX , LINE
  186. INT 21H
  187. CALL NEXTLINE
  188.  
  189. MOV AH , 09H
  190. LEA DX , YMESSAGE
  191. INT 21H
  192.  
  193. MOV AX , YFLOWER
  194. CALL DISDIG
  195.  
  196. CALL NEXTLINE
  197. MOV AH , 09H
  198. LEA DX , SMESSAGE
  199. INT 21H
  200.  
  201. MOV AX , SFLOWER
  202. CALL DISDIG
  203. CALL NEXTLINE
  204. MOV AH , 02H
  205. MOV DL , LINE
  206. INT 21H
  207.  
  208. CALL NEXTLINE
  209. CALL NEXTLINE
  210. MOV AH , 09H
  211. LEA DX , COMFIRM
  212. INT 21H
  213.  
  214. MOV AH , 01H
  215. INT 21H ; Input place
  216. MOV CCOMFIRM , AL
  217. JE CONFIRM
  218.  
  219. CONFIRM:
  220. MOV AH, 01H
  221. INT 21H
  222. MOV CCOMFIRM, AL
  223.  
  224. CMP AL, 'n' ;N ; Validation: Check if user type Y or N.
  225. JE START01
  226.  
  227. CMP AL, 'Y' ;Y
  228. JE CALCULATION11
  229.  
  230. CMP AL, 'N' ;N ; Validation: Check if user type y or n.
  231. JE START01
  232.  
  233. CMP AL, 'y' ;Y
  234. JMP CALCULATION11
  235.  
  236. CALCULATION11 :
  237. JMP CALCULATION1
  238.  
  239. START01 :
  240. JMP START
  241.  
  242. MOV AH , 09H
  243. LEA DX , ERROR
  244. INT 21H
  245. CALL NEXTLINE
  246. CALL NEXTLINE
  247.  
  248. JMP CONTINUE1
  249.  
  250. CONTINUE2 :
  251.  
  252. CALL NEXTLINE
  253.  
  254. MOV AH , 09H
  255. LEA DX , YMESSAGE1
  256. INT 21H
  257.  
  258. MOV AX , YFLOWER1
  259. CALL DISDIG
  260.  
  261. CALL NEXTLINE
  262. MOV AH , 09H
  263. LEA DX , SMESSAGE1
  264. INT 21H
  265.  
  266. MOV AX , SFLOWER1
  267. CALL DISDIG
  268.  
  269. CALL NEXTLINE
  270. CALL NEXTLINE
  271. MOV AH , 09H
  272. LEA DX , COMFIRM
  273. INT 21H
  274.  
  275. MOV AH , 01H
  276. INT 21H ; Input place
  277. MOV CCOMFIRM , AL
  278.  
  279. CMP CCOMFIRM , 'N'
  280. JE START3
  281.  
  282. CMP CCOMFIRM , 'n'
  283. JE START3 ; check if y and Y go to CALCULATION
  284.  
  285. CMP CCOMFIRM , 'Y'
  286. JE CALCULATION2A
  287.  
  288. CMP CCOMFIRM , 'y'
  289. JE CALCULATION2A ; check if n and N go to Input place
  290.  
  291. CALCULATION2A :
  292. JMP CALCULATION2
  293.  
  294. START3 :
  295. JMP START
  296.  
  297. MOV AH , 09H
  298. LEA DX , ERROR
  299. INT 21H
  300. CALL NEXTLINE
  301. CALL NEXTLINE
  302.  
  303. JE CONTINUE2A
  304.  
  305. CONTINUE2A:
  306. JMP CONTINUE2
  307.  
  308. CONTINUE3 :
  309.  
  310. CALL NEXTLINE
  311.  
  312. MOV AH , 09H
  313. LEA DX , YMESSAGE2
  314. INT 21H
  315.  
  316. MOV AX , YFLOWER2
  317. CALL DISDIG
  318.  
  319. CALL NEXTLINE
  320. MOV AH , 09H
  321. LEA DX , SMESSAGE2
  322. INT 21H
  323.  
  324. MOV AX , SFLOWER2
  325. CALL DISDIG
  326.  
  327. CALL NEXTLINE
  328. CALL NEXTLINE
  329. MOV AH , 09H
  330. LEA DX , COMFIRM
  331. INT 21H
  332.  
  333. MOV AH , 01H
  334. INT 21H ; Input place
  335. MOV CCOMFIRM , AL
  336.  
  337. CMP CCOMFIRM , 'n'
  338. JE START4
  339.  
  340. CMP CCOMFIRM , 'N'
  341. JE START4
  342.  
  343. CMP CCOMFIRM , 'Y'
  344. JE CALCULATION32 ; check if y and Y go to CALCULATION
  345.  
  346. CMP CCOMFIRM , 'y'
  347. JE CALCULATION32
  348.  
  349. CALCULATION32 :
  350. JMP CALCULATION3
  351.  
  352. START4 :
  353. JMP START
  354.  
  355. MOV AH , 09H
  356. LEA DX , ERROR
  357. INT 21H
  358. CALL NEXTLINE
  359. CALL NEXTLINE
  360.  
  361. JE CONTINUE33
  362.  
  363. CONTINUE33 :
  364. JMP CONTINUE3
  365.  
  366. CALCULATION1 :
  367.  
  368. MOV AX, YFLOWER
  369. SUB AX, RFLOWER ; YFLOWER - RFLOWER = RFLOWER
  370. MOV RFLOWER, AX
  371.  
  372. MOV AX, RFLOWER
  373. MOV BX, SFLOWER
  374. CMP AX, BX ; CHECK THE SALES AND REMAIN IS SAME OR NOT <-- PROBLEM, TEACHER SAY MOV TO REGISTER FIRST BUT DON KNOW HOW..
  375. JE CORRECT1
  376.  
  377. CALL NEXTLINE
  378. CALL NEXTLINE
  379. MOV AH , 09H
  380. LEA DX ,CALCULATIONERROR
  381. INT 21H
  382. CALL NEXTLINE
  383. CALL NEXTLINE
  384.  
  385. MOV AH , 09H
  386. LEA DX ,CALCULATIONERROR1
  387. INT 21H
  388. CALL NEXTLINE
  389.  
  390. MOV AH , 09H
  391. LEA DX ,CALCULATIONERROR2
  392. INT 21H
  393.  
  394. MOV AX , SFLOWER2
  395. CALL DISDIG
  396.  
  397. CONFIRMEXIT1 :
  398. JMP CONFIRMEXIT
  399.  
  400. CORRECT1 :
  401. CALL NEXTLINE
  402. MOV AH , 09H
  403. LEA DX , CORRECTMESSAGE
  404. INT 21H
  405.  
  406. CALL NEXTLINE
  407. MOV AH , 09H
  408. LEA DX , CORRECTMESSAGE1
  409. INT 21H
  410.  
  411. MOV AX, SFLOWER
  412. CALL DISDIG
  413.  
  414. JE CONFIRMEXIT01
  415.  
  416. CONFIRMEXIT01:
  417. JMP CONFIRMEXIT
  418.  
  419.  
  420. CALCULATION2 :
  421.  
  422. MOV AX , YFLOWER1 ;Y - R = R
  423. SUB AX, RFLOWER1
  424. MOV RFLOWER1, AX
  425.  
  426. MOV BX, SFLOWER1
  427. CMP AX , BX ;S == R ?
  428. JE CORRECT2
  429.  
  430. CALL NEXTLINE
  431. CALL NEXTLINE
  432. MOV AH , 09H
  433. LEA DX ,CALCULATIONERROR
  434. INT 21H
  435. CALL NEXTLINE
  436. CALL NEXTLINE
  437.  
  438. MOV AH , 09H
  439. LEA DX ,CALCULATIONERROR1
  440. INT 21H
  441. CALL NEXTLINE
  442.  
  443. MOV AH , 09H
  444. LEA DX ,CALCULATIONERROR2
  445. INT 21H
  446.  
  447. MOV AX , SFLOWER2
  448. CALL DISDIG
  449.  
  450. JMP CONFIRMEXIT
  451.  
  452. CORRECT2 :
  453. CALL NEXTLINE
  454. MOV AH , 09H
  455. LEA DX , CORRECTMESSAGE
  456. INT 21H
  457.  
  458. CALL NEXTLINE
  459. MOV AH , 09H
  460. LEA DX , CORRECTMESSAGE1
  461. INT 21H
  462.  
  463. MOV AX, SFLOWER1
  464. CALL DISDIG
  465.  
  466. JE CONFIRMEXIT
  467.  
  468. CALCULATION3 :
  469.  
  470. MOV AX , YFLOWER2
  471. SUB RFLOWER2 , AX
  472.  
  473. CMP AX , SFLOWER2
  474. JE CORRECT3
  475.  
  476. CALL NEXTLINE
  477. CALL NEXTLINE
  478. MOV AH , 09H
  479. LEA DX ,CALCULATIONERROR
  480. INT 21H
  481. CALL NEXTLINE
  482. CALL NEXTLINE
  483.  
  484. MOV AH , 09H
  485. LEA DX ,CALCULATIONERROR1
  486. INT 21H
  487. CALL NEXTLINE
  488.  
  489. MOV AH , 09H
  490. LEA DX ,CALCULATIONERROR2
  491. INT 21H
  492.  
  493. MOV AX , SFLOWER2
  494. CALL DISDIG
  495.  
  496. CORRECT3 :
  497. CALL NEXTLINE
  498. MOV AH , 09H
  499. LEA DX , CORRECTMESSAGE
  500. INT 21H
  501.  
  502. CALL NEXTLINE
  503. MOV AH , 09H
  504. LEA DX , CORRECTMESSAGE1
  505. INT 21H
  506.  
  507. MOV AX, SFLOWER2
  508. CALL DISDIG
  509.  
  510. JMP CONFIRMEXIT
  511.  
  512. CONFIRMEXIT :
  513.  
  514. CALL NEXTLINE
  515. CALL NEXTLINE
  516. MOV AH , 09H
  517. LEA DX , CONTINUECHECK
  518. INT 21H
  519.  
  520. MOV AH , 01H
  521. INT 21H ; Input place
  522. MOV CCHECK , AL
  523. CALL NEXTLINE
  524.  
  525. CMP CCHECK , 'y'
  526. JNE Exit001
  527. JMP START
  528.  
  529. CMP CCHECK , 'Y'
  530. JNE Exit001
  531. JMP START
  532. ; check if y and Y return back to star
  533. Exit001:
  534. CMP CCHECK , 'N'
  535. JMP START
  536.  
  537. CMP CCHECK , 'n'
  538. JMP START ; check if n and N go to EXIT
  539.  
  540. CALL NEXTLINE
  541. MOV AH , 09H
  542. LEA DX , ERRORCHECK
  543. INT 21H
  544. CALL NEXTLINE
  545. JMP CONFIRMEXIT
  546.  
  547. EXIT :
  548.  
  549. CALL NEXTLINE
  550. CALL NEXTLINE
  551. MOV AH , 09H
  552. LEA DX , EXITMESSAGE
  553. INT 21H
  554.  
  555. MOV AX , 4C00H
  556. INT 21H
  557. MAIN ENDP
  558.  
  559. END MAIN
Add Comment
Please, Sign In to add comment