Advertisement
Guest User

MPS PROEKT

a guest
Feb 19th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.32 KB | None | 0 0
  1. ; multi-segment executable file template.
  2.  
  3. data segment
  4. ;COBE
  5. brojElementiF dw 0
  6. brojElementiC dw 0
  7. mnozenje dw 10
  8. pomosna dw 0
  9. ;pom dw 0
  10. promenliva dw 0
  11. arrayA dw 64 dup(?)
  12. brojacC dw 8
  13. brzinaC dw 0
  14. denC dw 0
  15. mesecC dw 0
  16. godinaC dw 0
  17. sumaC dw 0
  18. greska db "GRESKA$"
  19.  
  20. ;ALEK
  21. countDevideA dw 8
  22. digitsA dw 5 dup(?)
  23. onesA dw 0
  24. tensA dw 0
  25. tenA dw 10
  26. arrayCountA dw 0
  27. newArrayCountA dw 0
  28. maxArrayCountA dw 4
  29. fitElementsCountA dw 0
  30. newArrayA dw 32 dup (?)
  31. maxPriceArrayA dw 8 dup (?)
  32. monthA dw 0
  33. yearA dw 0
  34. dotA dw 0
  35. exclamationPointA dw 0
  36. maxDayA dw -1
  37. maxPriceA dw -1
  38. negOneA dw -1
  39. denStringA dw "Na den $"
  40. maxSumaA dw "maksimalnata suma e $"
  41. errorStringA dw "GRESHKA$"
  42. promenlivaAlek dw 0
  43.  
  44. ;FILIP
  45. indexF dw 0
  46. startDeleteF dw 0
  47. localMF dw 0 ;promenliva vo koja se chuva mesecot prochitan od tastatura
  48. localYF dw 0 ;promenliva vo koja se chuva godinata prochitana od tastatura
  49. localDF dw 0 ;promenliva vo koja se chuva denot prochitan od tastatura
  50. localPF dw 0 ;promenliva vo koja se chuva sumata prochitana od tastatura
  51. desetF dw 10
  52. chetriF dw 4
  53. flagF dw 0 ;dali se brishelo neshto
  54. errorStringF dw "GRESHKA$"
  55.  
  56. inputNiza db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  57. brKarakteri db 0
  58. indexKarakteri db 0
  59. addString db 'a', 'd', 'd'
  60. maxString db 'm', 'a', 'x'
  61. eraseString db 'e', 'r', 'a', 's', 'e'
  62.  
  63. brisi db "erase$"
  64. dodaj db "add$"
  65. maksimum db "max$"
  66. errKarakteri db "GRESHKA$"
  67.  
  68. flagNegative dw 0
  69. prvBrojFlag dw 1
  70.  
  71.  
  72. addStr dw "ADD$"
  73. maxStr dw "MAX$"
  74. eraseStr dw "ERASE$"
  75. tmpStr dw "$"
  76. fistLetter dw 0
  77.  
  78. ends
  79.  
  80. stack segment
  81. dw 128 dup(0)
  82. ends
  83.  
  84. code segment
  85. ;;COBE
  86.  
  87. vnesuvanjeBroeviC PROC ; se prekinuva koga ke se vnese znakot "."
  88. mov ah, 1
  89. int 21h
  90.  
  91. mov ah, 0
  92. sub al, 30h
  93. mul mnozenje
  94. mov bx, ax
  95. mov promenliva, bx
  96.  
  97.  
  98. loopcobe:
  99. mov ah, 1
  100. int 21h
  101. mov ah, 0
  102.  
  103. cmp al, 46
  104. jz kraj
  105.  
  106. sub ax, 30h
  107. mov cx, ax
  108.  
  109.  
  110.  
  111. add bx, cx
  112. mov promenliva, bx
  113. mov ax, bx
  114. mul mnozenje
  115. mov bx, ax
  116. mov promenliva, bx
  117.  
  118. jmp loopcobe
  119.  
  120. kraj:
  121.  
  122. mov ax, bx
  123.  
  124. div mnozenje
  125. mov promenliva, ax
  126.  
  127. RET
  128. vnesuvanjeBroeviC ENDP
  129.  
  130.  
  131. vnesuvanjeSumaC PROC ; se prekinuva koga ke se vnese znakot ">"
  132. mov ah, 1
  133. int 21h
  134.  
  135. mov ah, 0
  136.  
  137. cmp ax, '-'
  138. jne dontChangeFlag
  139. mov flagNegative, 1
  140. dontChangeFlag:
  141.  
  142. sub al, 30h
  143. mul mnozenje
  144. mov bx, ax
  145. mov promenliva, bx
  146.  
  147. loopexample:
  148. mov ah, 1
  149. int 21h
  150. mov ah, 0
  151.  
  152. cmp al, 62
  153. jz krajC
  154.  
  155. sub ax, 30h
  156. mov cx, ax
  157.  
  158.  
  159.  
  160. add bx, cx
  161. mov promenliva, bx
  162. mov ax, bx
  163. mul mnozenje
  164. mov bx, ax
  165. mov promenliva, bx
  166.  
  167. jmp loopexample
  168.  
  169. krajC:
  170.  
  171. mov ax, bx
  172.  
  173. div mnozenje
  174. mov promenliva, ax
  175.  
  176. RET
  177. vnesuvanjeSumaC ENDP
  178.  
  179. ;;;;;;;;;;;;;;
  180. ;;;;;ADD;;;;;;
  181. ;;;;;;;;;;;;;;
  182.  
  183.  
  184. addC PROC
  185. mov flagNegative, 0
  186.  
  187. call vnesuvanjeSumaC ; se vnesuva sumata i se stava vo stek
  188. mov cx, promenliva
  189. mov sumaC, cx
  190.  
  191. call vnesuvanjeBroeviC ; se vnesuva denot i se stava vo stek
  192. mov cx, promenliva
  193. mov denC, cx
  194.  
  195. ; se vnesuvaat mesecot i godinata i se stavaat na
  196. ; pocetok na nizata
  197. call vnesuvanjeBroeviC
  198. mov cx, promenliva
  199. mov mesecC, cx
  200.  
  201.  
  202.  
  203. call vnesuvanjeBroeviC
  204. mov cx, promenliva
  205. mov godinaC, cx
  206.  
  207.  
  208.  
  209. cmp flagNegative, 1
  210. je izlez
  211.  
  212.  
  213. cmp mesecC, 12d ; sporedba
  214. jg izlez
  215. cmp mesecC, 1d ; sporedba
  216. jl izlez
  217.  
  218.  
  219.  
  220.  
  221. cmp godinaC, 99d ;sporedba za izlez
  222. jg izlez
  223. cmp godinaC, 1d
  224. jl izlez
  225.  
  226.  
  227.  
  228. cmp denC, 31d ; proverka
  229. jg izlez
  230. cmp denC, 1d
  231. jl izlez
  232.  
  233.  
  234.  
  235.  
  236.  
  237. mov bx, 0
  238.  
  239. mov bx, brzinaC ; se stava mesec
  240. mov cx, mesecC
  241. mov arrayA[bx], cx
  242. mov dl, 2
  243. add brzinaC, 2
  244.  
  245. mov bx, brzinaC ; se stava godina
  246. mov cx, godinaC
  247. mov arrayA[bx], cx
  248. mov dl, 2
  249. add brzinaC, 2
  250.  
  251.  
  252. mov bx, brzinaC ; se stava den
  253. mov cx, denC
  254. mov arrayA[bx], cx
  255. mov dl, 2
  256. add brzinaC, 2
  257.  
  258. mov bx, brzinaC ; se stava suma
  259. mov cx, sumaC
  260. mov arrayA[bx], cx
  261. mov dl, 2
  262. add brzinaC, 2
  263.  
  264. add brojElementiF, 4
  265. add brojElementiC, 8
  266. call newLine
  267.  
  268.  
  269. jmp tabla
  270.  
  271. izlez:
  272. call newLine
  273. lea dx, greska
  274. mov ah, 9
  275. int 21h
  276. call newLine
  277.  
  278. tabla:
  279.  
  280. RET
  281. addC ENDP
  282.  
  283. newLine PROC ; nova linija
  284.  
  285. mov dl, 10
  286. mov ah, 2h
  287. int 21h
  288. mov dl, 13
  289. mov ah, 2h
  290. int 21h
  291.  
  292. RET
  293. newLine ENDP
  294.  
  295. ;;END COBE
  296.  
  297. ;;ALEK
  298.  
  299. ;;;;;;;;;;;;;;;;;;;
  300. ;;;;;printDateA;;;;
  301. ;;;;;;;;;;;;;;;;;;;
  302.  
  303. printDate PROC
  304.  
  305. div tenA
  306. mov onesA, dx
  307. cmp ax, 0
  308. jz addZeroA
  309. mov tensA, ax
  310.  
  311. jmp echoDateA
  312.  
  313. addZeroA:
  314.  
  315. mov tensA, 0
  316.  
  317. echoDateA:
  318.  
  319. mov ah, 2
  320. mov dx, tensA
  321. add dx, 30h
  322. int 21h
  323.  
  324. mov dx, onesA
  325. add dx, 30h
  326. int 21h
  327.  
  328. RET
  329. printDate ENDP
  330.  
  331. ;;;;;;;;;;;;;;;;;;;
  332. ;;;;;AnewLineA;;;;;;
  333. ;;;;;;;;;;;;;;;;;;;
  334.  
  335. ;newLine PROC
  336.  
  337. ;mov dl, 10
  338. ;mov ah, 2h
  339. ;int 21h
  340. ;mov dl, 13
  341. ;mov ah, 2h
  342. ;int 21h
  343.  
  344. ;RET
  345. ;newLine ENDP
  346.  
  347. ;;;;;;;;;;;;;;;;;;;;
  348. ;;;;devideDigitsA;;;
  349. ;;;;;;;;;;;;;;;;;;;;
  350.  
  351. devideDigitsA PROC
  352.  
  353. mov ax, maxPriceA
  354.  
  355. devideA:
  356.  
  357. div tenA
  358.  
  359. mov bx, countDevideA
  360. mov digitsA[bx], dx
  361.  
  362. mov dx, 0
  363.  
  364. sub countDevideA, 2
  365.  
  366. cmp countDevideA, -2
  367. jz endDevideA
  368.  
  369. jmp devideA
  370.  
  371. RET
  372. devideDigitsA ENDP
  373.  
  374. printNumberA PROC
  375.  
  376. mov ax, maxPriceA
  377.  
  378. mov countDevideA, 0
  379.  
  380. cmp maxPriceA, 0
  381. jz printZeroA
  382.  
  383. printDigitsA:
  384.  
  385. cmp countDevideA, 10
  386. jz exitPrintNumberA
  387.  
  388. mov bx, countDevideA
  389. mov dx, digitsA[bx]
  390. add dx, 30h
  391.  
  392. cmp dx, 48
  393. jz removeLeadingZeroA
  394.  
  395. ;add countDevideA, 2
  396.  
  397. jmp printDigitsNonZeroA
  398.  
  399. mov ah, 2
  400. int 21h
  401. mov dx, 0
  402.  
  403. add countDevideA, 2
  404. jmp printDigitsA
  405.  
  406. removeLeadingZeroA:
  407.  
  408. add countDevideA, 2
  409. jmp printDigitsA
  410.  
  411. printZeroA:
  412.  
  413. mov dx, 30h
  414. mov ah, 2
  415. int 21h
  416.  
  417. printDigitsNonZeroA:
  418.  
  419. cmp countDevideA, 10
  420. jz exitPrintNumberA
  421.  
  422. mov bx, countDevideA
  423. mov dx, digitsA[bx]
  424. add dx, 30h
  425.  
  426. mov ah, 2
  427. int 21h
  428. mov dx, 0
  429.  
  430. add countDevideA, 2
  431. jmp printDigitsNonZeroA
  432.  
  433.  
  434.  
  435. RET
  436. printNumberA ENDP
  437.  
  438. formatedPrint PROC
  439.  
  440. lea dx, denStringA
  441. mov ah, 9
  442. int 21h
  443. mov dx, 0
  444.  
  445. mov ax, maxDayA
  446.  
  447. call printDate
  448.  
  449. mov ah, 2
  450. mov dx, '.'
  451. int 21h
  452. mov dx, 0
  453.  
  454. mov ax, monthA
  455.  
  456. call printDate
  457.  
  458. mov ah, 2
  459. mov dx, '.'
  460. int 21h
  461. mov dx, 0
  462.  
  463. mov ax, yearA
  464.  
  465. call printDate
  466.  
  467. mov ah, 2
  468. mov dx, ' '
  469. int 21h
  470. mov dx, 0
  471.  
  472. lea dx, maxSumaA
  473. mov ah, 9
  474. int 21h
  475. mov dx, 0
  476.  
  477. call devideDigitsA
  478. endDevideA:
  479.  
  480. call printNumberA
  481. exitPrintNumberA:
  482.  
  483. jmp exitFormatedPrint
  484.  
  485. RET
  486. formatedPrint ENDP
  487.  
  488. ;;;;;;;;;;;;;;;;;;;
  489. ;;;;;filterDate;;;;
  490. ;;;;;;;;;;;;;;;;;;;
  491.  
  492. filterDate PROC
  493.  
  494. ;reset newArrayA
  495. mov cx, 32
  496. mov bx, 0
  497. resetLoop:
  498. mov newArrayA[bx], -1
  499. add bx, 2
  500. loop resetLoop
  501.  
  502. mov arrayCountA, 0
  503.  
  504. mvAllValid:
  505. mov bx, brojElementiC
  506. cmp arrayCountA, bx
  507. jg exitFilterDate
  508.  
  509. mov bx, arrayCountA
  510.  
  511. mov dx, arrayA[bx]
  512.  
  513. cmp dx, monthA
  514. jnz incrementArrayCountA
  515.  
  516. add bx, 2
  517. mov dx, arrayA[bx]
  518.  
  519. cmp dx, yearA
  520. jz addToArray
  521.  
  522.  
  523. add arrayCountA, 8
  524.  
  525. jmp mvAllValid
  526.  
  527.  
  528. addToArray:
  529.  
  530. mov cx, 2
  531.  
  532. mvElements:
  533.  
  534. mov bx, arrayCountA
  535. add bx, 4
  536. mov dx, arrayA[bx]
  537. add arrayCountA, 2
  538.  
  539. mov bx, newArrayCountA
  540. mov newArrayA[bx], dx
  541. add newArrayCountA, 2
  542.  
  543. add fitElementsCountA, 2
  544.  
  545. loop mvElements
  546.  
  547. mov dx, arrayCountA
  548. add dx, 4
  549. mov arrayCountA, dx
  550.  
  551. mov bx, brojElementiC
  552. cmp arrayCountA, bx
  553. jz exitFilterDate
  554. jmp mvAllValid
  555.  
  556. incrementArrayCountA:
  557.  
  558. add arrayCountA, 8
  559. jmp mvAllValid
  560.  
  561. RET
  562. filterDate ENDP
  563.  
  564. ;;;;;;;;;;;;;;;;;;;;
  565. ;;createArrayDateA;;
  566. ;;;;;;;;;;;;;;;;;;;;
  567.  
  568. createArrayDateA PROC
  569.  
  570. setNegativeOneA:
  571.  
  572. mov dx, brojElementiC
  573. cmp dx, 0
  574. jz end
  575.  
  576. mov dx, newArrayCountA
  577. cmp dx, fitElementsCountA
  578. jz end
  579.  
  580. mov maxArrayCountA, 4
  581. mov bx, newArrayCountA
  582. mov dx, newArrayA[bx]
  583.  
  584.  
  585. cmp dx, -1
  586. jz incBy2
  587.  
  588. mov maxDayA, dx
  589. mov dx, negOneA
  590. mov newArrayA[bx], dx
  591.  
  592. add bx, 2
  593. mov dx, newArrayA[bx]
  594. mov maxPriceA, dx
  595. mov dx, negOneA
  596. mov newArrayA[bx], dx
  597.  
  598. loopArrayA:
  599.  
  600. mov dx, maxArrayCountA
  601. cmp dx, fitElementsCountA
  602. jz printMessageA
  603.  
  604. mov bx, maxArrayCountA
  605. mov dx, newArrayA[bx]
  606.  
  607. cmp dx, maxDayA
  608. jnz incBy4
  609. mov newArrayA[bx], -1
  610.  
  611. add bx, 2
  612. mov dx, newArrayA[bx]
  613. mov newArrayA[bx], -1
  614.  
  615. cmp dx, maxPriceA
  616. jl incBy4
  617.  
  618. add maxArrayCountA, 4
  619.  
  620. mov maxPriceA, dx
  621.  
  622. jmp loopArrayA
  623.  
  624. incBy4:
  625.  
  626. add maxArrayCountA, 4
  627. jmp loopArrayA
  628.  
  629. incBy2:
  630.  
  631. add newArrayCountA, 2
  632. mov maxPriceA, 0
  633. jmp setNegativeOneA
  634.  
  635. printMessageA:
  636.  
  637. mov countDevideA, 8
  638. call formatedPrint
  639. exitFormatedPrint:
  640. call newLine
  641.  
  642. add newArrayCountA, 2
  643. mov maxPriceA, 0
  644. jmp setNegativeOneA
  645.  
  646. RET
  647. createArrayDateA ENDP
  648.  
  649. maxAlek PROC
  650.  
  651. mov monthA, 0
  652. mov yearA, 0
  653.  
  654. mov ah, 1
  655. int 21h
  656. mov ah, 0
  657. sub al, 30h
  658. mul tenA
  659. mov bx, ax
  660. mov monthA, bx
  661.  
  662.  
  663.  
  664. loopMonthA: ; vnes na mesec alek
  665.  
  666. mov ah, 1
  667. int 21h
  668. mov ah, 0
  669.  
  670. cmp al, '.'
  671. jz endLoopMonthA
  672.  
  673. sub ax, 30h
  674. mov cx, ax
  675.  
  676.  
  677.  
  678. add bx, cx
  679. mov monthA, bx
  680. mov ax, bx
  681. mul tenA
  682. mov bx, ax
  683. mov monthA, bx
  684.  
  685. jmp loopMonthA
  686.  
  687.  
  688. endLoopMonthA:
  689.  
  690. mov ax, bx
  691. div tenA
  692. mov monthA, ax
  693.  
  694.  
  695. mov ah, 1
  696. int 21h
  697. mov ah, 0
  698. sub al, 30h
  699. mul tenA
  700. mov bx, ax
  701. mov yearA, bx
  702.  
  703.  
  704.  
  705. loopYearA: ; vnes na mesec alek
  706.  
  707. mov ah, 1
  708. int 21h
  709. mov ah, 0
  710.  
  711. cmp al, '!'
  712. jz endLoopYearA
  713.  
  714. sub ax, 30h
  715. mov cx, ax
  716.  
  717.  
  718.  
  719. add bx, cx
  720. mov yearA, bx
  721. mov ax, bx
  722. mul tenA
  723. mov bx, ax
  724. mov YearA, bx
  725.  
  726. jmp loopYearA
  727.  
  728.  
  729. endLoopYearA:
  730.  
  731. mov ax, bx
  732. div tenA
  733. mov yearA, ax
  734.  
  735.  
  736.  
  737. cmp monthA, 12
  738. jg errorA
  739.  
  740. cmp monthA, 1
  741. jl errorA
  742.  
  743. cmp yearA, 99
  744. jg errorA
  745.  
  746. cmp yearA, 1
  747. jl errorA
  748.  
  749.  
  750.  
  751. call newLine
  752.  
  753. call filterDate
  754. exitFilterDate:
  755.  
  756. mov newArrayCountA, 0
  757.  
  758. call createArrayDateA
  759.  
  760. errorA:
  761.  
  762. call newLine
  763.  
  764. lea dx, errorStringA
  765. mov ah, 9
  766. int 21h
  767. mov dx, 0
  768.  
  769. call newLine
  770.  
  771.  
  772. RET
  773. maxAlek ENDP
  774.  
  775. ;;END ALEK
  776.  
  777.  
  778. ;;FILIP
  779.  
  780. eraseF PROC
  781.  
  782. ;sekogash koga kje se povika ovaa procedura treba da se resetiraat promenlivite na 0
  783. mov localPF, 0
  784. mov localDF, 0
  785. mov localMF, 0
  786. mov localYF, 0
  787. mov indexF, 0
  788. mov startDeleteF, 0
  789. mov flagF, 0
  790. mov prvBrojFlag, 1
  791. mov flagNegative, 1
  792.  
  793. ;chitanje na vrednosti od tastatura
  794.  
  795. dodadiLocalVrednostP:
  796. mov ah,1
  797. int 21h ;chitanje na vrednost i chuvanje vo AL
  798. cmp prvBrojFlag, 1
  799. jne notANegative
  800.  
  801. cmp ax, '-'
  802. jne notANegative
  803. mov flagNegative, 1
  804.  
  805. notANegative:
  806. cmp al, '>'
  807. je krajVrednostP
  808. mov ah, 0
  809. sub al, 30h ;odzemame 30h za da ja dobieme cifrata dekadno
  810. mov bx, ax ;ja chuvam vo "temp", bx
  811. mov ax, localPF
  812. mul desetF
  813. add ax, bx
  814. mov localPF, ax
  815. jmp dodadiLocalVrednostP
  816.  
  817. krajVrednostP: ;prochitana cena, chitaj den
  818.  
  819. dodadiLocalVrednostD:
  820. mov ah,1
  821. int 21h ;chitanje na vrednost i chuvanje vo AL
  822. cmp al, '.'
  823. je krajVrednostD
  824. mov ah, 0
  825. sub al, 30h ;odzemame 30h za da ja dobieme cifrata dekadno
  826. mov bx, ax ;ja chuvam vo "temp", bx
  827. mov ax, localDF
  828. mul desetF
  829. add ax, bx
  830. mov localDF, ax
  831. jmp dodadiLocalVrednostD
  832.  
  833. krajVrednostD: ;prochitan den, chitaj mesec
  834.  
  835. dodadiLocalVrednostM:
  836. mov ah,1
  837. int 21h ;chitanje na vrednost i chuvanje vo AL
  838. cmp al, '.'
  839. je krajVrednostM
  840. mov ah, 0
  841. sub al, 30h ;odzemame 30h za da ja dobieme cifrata dekadno
  842. mov bx, ax ;ja chuvam vo "temp", bx
  843. mov ax, localMF
  844. mul desetF
  845. add ax, bx
  846. mov localMF, ax
  847. jmp dodadiLocalVrednostM
  848.  
  849. krajVrednostM: ;prochitan mesec, chitaj godina
  850.  
  851. dodadiLocalVrednostY:
  852. mov ah,1
  853. int 21h ;chitanje na vrednost i chuvanje vo AL
  854. cmp al, '.'
  855. je krajVrednostY
  856. mov ah, 0
  857. sub al, 30h ;odzemame 30h za da ja dobieme cifrata dekadno
  858. mov bx, ax ;ja chuvam vo "temp", bx
  859. mov ax, localYF
  860. mul desetF
  861. add ax, bx
  862. mov localYF, ax
  863. jmp dodadiLocalVrednostY
  864.  
  865. krajVrednostY: ;prochitana godina
  866.  
  867. ;zavrsheno chitanje od tastura, gi imam vrednostite po koi treba da ja prebaruvam nizata
  868.  
  869. ;prvo da proveram za greshka vo vrednostite
  870. cmp flagNegative, 1
  871. je errorF
  872.  
  873. cmp localPF, 1
  874. jl errorF
  875.  
  876. cmp localDF, 1
  877. jl errorF
  878.  
  879. cmp localDF, 31
  880. jg errorF
  881.  
  882. cmp localMF, 1
  883. jl errorF
  884.  
  885. cmp localMF, 12
  886. jg errorF
  887.  
  888. cmp localYF, 1
  889. jl errorF
  890.  
  891. cmp localYF, 99
  892. jg errorF
  893.  
  894. ;dokolku gi projde site, treba da se izmine nizata
  895.  
  896. izminiF:
  897. mov indexF, 0
  898.  
  899. startloopF:
  900. mov bx, indexF ;index od memorija vo registar
  901. cmp bx, brojElementiF
  902. jg krajF ;dokolku indeksot e pogolem od vkupniot broj na elementi, tolku (nema shto da se brishe)
  903.  
  904. add bx, bx ;dupliranje na registarot (*2) zoshto rabotam so dw
  905. mov ax, arrayA[bx] ;zoshto imeto na promenlivata e adresata na promenlivata, mozham vaka da go dobijam elementot
  906.  
  907. ;go imam mesecot vo AX
  908. ;go sporeduvam so localMF
  909. cmp ax, localMF
  910. jne nextSetCetF
  911.  
  912. ;mesecot e tamanka
  913. ;chuvaj go indexov vo startDeleteF
  914. mov bx, indexF
  915. mov startDeleteF, bx
  916.  
  917. ;proveri godina
  918. add indexF, 1
  919. mov bx, indexF
  920. add bx, bx ;dupliram radi DW
  921. mov ax, arrayA[bx] ;godina e vo ax
  922. cmp ax, localYF
  923. jne nextSetTriF
  924. ;godina e tamanka
  925.  
  926. ;proveri den
  927. add indexF, 1
  928. mov bx, indexF
  929. add bx, bx ;dupliram radi DW
  930. mov ax, arrayA[bx] ;godina e vo ax
  931. cmp ax, localDF
  932. jne nextSetDvaF
  933. ;den e tamanka
  934.  
  935. ;proveri suma
  936. add indexF, 1
  937. mov bx, indexF
  938. add bx, bx ;dupliram radi DW
  939. mov ax, arrayA[bx] ;godina e vo ax
  940. cmp ax, localPF
  941. jne nextSetEdenF
  942. ;cena e tamanka
  943.  
  944. add indexF, 1
  945. ;go zgolemiv index-ot za 1 za da stignam do prviot element shto ne treba da se brishe
  946. jmp brishiF
  947.  
  948. nextSetCetF:
  949. mov bx, indexF
  950. add bx, 4
  951. mov indexF, bx ;go zgolemiv index-ot za 4 (odam na sledniot set)
  952. jmp startloopF
  953.  
  954. nextSetTriF:
  955. mov bx, indexF
  956. add bx, 3
  957. mov indexF, bx ;go zgolemiv index-ot za 3 (odam na sledniot set)
  958. jmp startloopF
  959.  
  960. nextSetDvaF:
  961. mov bx, indexF
  962. add bx, 2
  963. mov indexF, bx ;go zgolemiv index-ot za 2 (odam na sledniot set)
  964. jmp startloopF
  965.  
  966. nextSetEdenF:
  967. mov bx, indexF
  968. add bx, 1
  969. mov indexF, bx ;go zgolemiv index-ot za 1 (odam na sledniot set)
  970. jmp startloopF
  971.  
  972. brishiF:
  973. ;elementot shto treba da se brishe e na pozicija startDeleteF
  974. ;elementot shto treba da go zameni e na indexF
  975. ;toa treba da se napravi 4pati za sekoj element
  976. cmp brojElementiF, 4
  977. je samoNamaliF
  978.  
  979. mov bx, brojElementiF
  980. sub bx, indexF ;ushte kolku elementi ostanuvaat (broj elementi e od 1 pa nagore,
  981. mov ax, bx ;a index e od 0 pa nagore, taka da mi odgovara posledniot inkrement)
  982. div chetriF ;posle delenje so 4, dobivam broj na setovi
  983.  
  984. mov cx, ax ;broj na setovi koi treba da se pomestat
  985.  
  986. mov flagF, 1 ;brishevme neshto
  987.  
  988. startloop2F:
  989. mov bx, indexF
  990. add bx, bx
  991. mov ax, arrayA[bx]
  992. mov bx, startDeleteF
  993. add bx, bx
  994. mov arrayA[bx], ax ;(prvo shiftanje)
  995. mov bx, indexF
  996. add bx, 1
  997. mov indexF, bx
  998. mov bx, startDeleteF
  999. add bx, 1
  1000. mov startDeleteF, bx
  1001.  
  1002. mov bx, indexF
  1003. add bx, bx
  1004. mov ax, arrayA[bx]
  1005. mov bx, startDeleteF
  1006. add bx, bx
  1007. mov arrayA[bx], ax ;(vtoro shiftanje)
  1008. mov bx, indexF
  1009. add bx, 1
  1010. mov indexF, bx
  1011. mov bx, startDeleteF
  1012. add bx, 1
  1013. mov startDeleteF, bx
  1014.  
  1015. mov bx, indexF
  1016. add bx, bx
  1017. mov ax, arrayA[bx]
  1018. mov bx, startDeleteF
  1019. add bx, bx
  1020. mov arrayA[bx], ax ;(treto shiftanje)
  1021. mov bx, indexF
  1022. add bx, 1
  1023. mov indexF, bx
  1024. mov bx, startDeleteF
  1025. add bx, 1
  1026. mov startDeleteF, bx
  1027.  
  1028. mov bx, indexF
  1029. add bx, bx
  1030. mov ax, arrayA[bx]
  1031. mov bx, startDeleteF
  1032. add bx, bx
  1033. mov arrayA[bx], ax ;(chetvrto shiftanje)
  1034. mov bx, indexF
  1035. add bx, 1
  1036. mov indexF, bx
  1037. mov bx, startDeleteF
  1038. add bx, 1
  1039. mov startDeleteF, bx
  1040. loop startloop2F
  1041.  
  1042. samoNamaliF:
  1043. sub brojElementiF, 4
  1044. sub brojElementiC, 8
  1045. sub brzinaC, 8
  1046.  
  1047. cmp flagF, 1
  1048. je izminiF
  1049.  
  1050. jmp greshka
  1051.  
  1052. errorF:
  1053. call newLine
  1054.  
  1055. lea dx, errorStringF
  1056. mov ah, 9
  1057. int 21h
  1058. mov dx, 0
  1059.  
  1060. greshka:
  1061.  
  1062. krajF:
  1063.  
  1064. mov dl, 10
  1065. mov ah, 2h
  1066. int 21h
  1067. mov dl, 13
  1068. mov ah, 2h
  1069. int 21h
  1070.  
  1071. RET
  1072. eraseF ENDP
  1073.  
  1074. ;;END FILIP
  1075.  
  1076. resetirajNiza PROC
  1077. resetiraj:
  1078. mov bl, indexKarakteri
  1079. mov bh, 0
  1080. mov inputNiza[bx], 0
  1081. loop resetiraj
  1082. RET
  1083. resetirajNiza ENDP
  1084.  
  1085. pecatiNovRed PROC
  1086. mov dl, 10
  1087. mov ah, 2
  1088. int 21h
  1089. mov dl, 13
  1090. mov ah, 2
  1091. int 21h
  1092. RET
  1093. pecatiNovRed ENDP
  1094.  
  1095. start:
  1096. ; set segment registers:
  1097. mov ax, data
  1098. mov ds, ax
  1099. mov es, ax
  1100.  
  1101. ; add your code here
  1102.  
  1103. jamka:
  1104.  
  1105. mov ah, 1
  1106. int 21h
  1107.  
  1108. cmp al, ' ' ;prazno mesto
  1109. je sporediKarakteri
  1110.  
  1111. mov bl, indexKarakteri
  1112. mov bh, 0
  1113. mov inputNiza[bx], al
  1114. add indexKarakteri, 1
  1115.  
  1116. jmp jamka
  1117.  
  1118.  
  1119. sporediKarakteri:
  1120. cmp indexKarakteri, 5 ;ako ima 5, neka proveri dali e erase
  1121. je daliErase
  1122.  
  1123. ;neka vidi dali e add
  1124. mov cx, 3
  1125. mov indexKarakteri, 0
  1126.  
  1127. daliAddLoop:
  1128. mov bl, indexKarakteri
  1129. mov bh, 0
  1130. mov dl, addString[bx]
  1131. cmp inputNiza[bx], dl
  1132. jne neEAdd
  1133. loop daliAddLoop
  1134. ;ako izleze od loop add e
  1135. call addC
  1136.  
  1137. ;reset inputNiza
  1138. ;reset indexKarakteri
  1139. mov cx, 10 ;tolku ima nizata
  1140. call resetirajNiza
  1141. mov indexKarakteri, 0
  1142. call pecatiNovRed
  1143. jmp jamka ;pak od pochetok se ova
  1144.  
  1145. neEAdd: ;ako ne e add, vidi dali e max
  1146.  
  1147. mov cx, 3
  1148. mov indexKarakteri, 0
  1149.  
  1150. daliMaxLoop:
  1151. mov bl, indexKarakteri
  1152. mov bh, 0
  1153. mov dl, maxString[bx]
  1154. cmp inputNiza[bx], dl
  1155. jne printGreshka
  1156. loop daliMaxLoop
  1157. ;ako izleze od loop add e
  1158. call maxAlek
  1159. end:
  1160.  
  1161. ;reset inputNiza
  1162. ;reset indexKarakteri
  1163. mov cx, 10 ;tolku ima nizata
  1164. call resetirajNiza
  1165. mov indexKarakteri, 0
  1166. call pecatiNovRed
  1167. jmp jamka ;pak od pochetok se ova
  1168.  
  1169. ;;;;;;;;;;;;;;;;;;
  1170.  
  1171. daliErase:
  1172. mov cx, 5
  1173. mov indexKarakteri, 0
  1174.  
  1175. daliEraseLoop:
  1176. mov bl, indexKarakteri
  1177. mov bh, 0
  1178. mov dl, eraseString[bx]
  1179. cmp inputNiza[bx], dl
  1180. jne printGreshka
  1181. loop daliEraseLoop
  1182.  
  1183. ;ako izleze od loop erase e
  1184. call eraseF
  1185.  
  1186. ;reset inputNiza
  1187. ;reset indexKarakteri
  1188. mov cx, 10 ;tolku ima nizata
  1189. call resetirajNiza
  1190. mov indexKarakteri, 0
  1191. call pecatiNovRed
  1192. jmp jamka ;pak od pochetok se ova
  1193.  
  1194. ;;;;;;;;;;;;;;;;
  1195.  
  1196. printGreshka:
  1197. mov dl, 10
  1198. mov ah, 2
  1199. int 21h
  1200. mov dl, 13
  1201. mov ah, 2
  1202. int 21h
  1203. lea dx, errKarakteri
  1204. mov ah, 9
  1205. int 21h
  1206. call pecatiNovRed
  1207.  
  1208. ;pak mora reset
  1209. ;reset inputNiza
  1210. ;reset indexKarakteri
  1211. mov cx, 10 ;tolku ima nizata
  1212. call resetirajNiza
  1213. mov indexKarakteri, 0
  1214. call pecatiNovRed
  1215. jmp jamka ;pak od pochetok se ova
  1216.  
  1217. mov ax, 4c00h ; exit to operating system.
  1218. int 21h
  1219. ends
  1220.  
  1221. end start ; set entry point and stop the assembler.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement