Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .MODEL small
- .STACK 100h
- .DATA
- intro db 'Iveskite skaiciu seka: ', '$'
- space db ' ', '$'
- line db 10, 13, '$'
- string db 126 dup('$')
- .CODE
- start:
- MOV ax, @data
- MOV ds, ax
- ; ----------
- ; cia laikysiu...
- MOV ch, 0 ; ... viso stringo ilgi (ciklo trukme apsisukimais)
- MOV si, 2 ; ... einamos stringo pozicijos numeri
- MOV cl, 0 ; ... einamo zodzio ilgi
- MOV bx, 0 ; ... einamo zodzio ilgi (reikes, kuomet skaicius virsys 9)
- ; --- isvedu pradine zinute ---
- MOV ah, 9
- LEA dx, intro
- INT 21h
- ; --- iveda stringa ---
- MOV ah, 0ah
- LEA dx, string
- INT 21h
- MOV ch, string[1] ; issisaugau stringo ilgi ir turiu apsisukimu skaiciu
- ; --- padarau eilutes tarpa ---
- MOV ah, 9
- LEA dx, line
- INT 21h
- ; ==================
- ; === SUKU CIKLA ===
- ; ==================
- tikrinu:
- CMP ch, 0 ; patikrinu ar ne stringo pabaiga (pasibaige ciklas)
- JE baigesi_ciklas
- CMP byte ptr string[si], 20h ; patikrinu ar simbolis yra tarpas
- JE tarpas
- JNE simbolis
- ; ------------------------------------------
- ; --- simbolis ---
- ; ------------------------------------------
- simbolis:
- INC si ; +1, kad imtu kita stringo simboli
- INC cl ; +1 prie zodzio ilgio
- INC bx ; +1 prie zodzio ilgio
- DEC ch ; -1, nes ciklas prasisuko viena karta
- JMP tikrinu ; suka cikla toliau
- ; ------------------------------------------
- ; --- simbolis ---
- ; ------------------------------------------
- ; ------------------------------------------
- ; --- tarpas ---
- ; ------------------------------------------
- tarpas:
- CMP cl, 10 ; jeigu skaicius didesnis, nei 9, tai reikia kitaip su juo elgtis
- JAE didelis_skaicius
- DEC ch ; -1, nes ciklas prasisuko viena karta
- ADD cl, 30h ; paverciu skaiciu i ASCII...
- MOV ah, 02h
- MOV dl, cl ; ... ir ji spausdinu
- INT 21h
- MOV ah, 9
- LEA dx, space ; spausdinu tarpa tarp skaiciu
- INT 21h
- MOV cl, 0 ; nunulinu zodzio
- MOV bx, 0 ; ilgio skaitliukus
- INC si ; +1, kad imtu kita stringo simboli
- JMP tikrinu
- ; ------------------------------------------
- ; --- tarpas ---
- ; ------------------------------------------
- didelis_skaicius:
- DEC ch ; -1, nes prasisuko ciklas
- ; KODEL CIA YRA last_call_big PAAISKINIMAS
- ; ----------------------------------------
- ; Jeigu baigiasi stringas (kurio ilgi laikau ch) ir einamasis zodis turejo
- ; daugiau, nei 9 simbolius, tai cia persokus ir ivykdzius komanda
- ; DEC CH man ciklo skaitliukas vel resetinasi i reiksme FF
- ; taip pratesdamas cikla ir sugadindamas programa tad, kad to isvengti
- ; sukuriau atskira jumpa butent siam atvejui
- last_call_big:
- MOV ax, bx ; DIV funkcija dalina skaiciu, kuris yra AX registre
- ; todel savo zodzio ilgi ten persikeliu
- MOV dl, 10 ; is kiek dalinsiu ir padalinu
- DIV dl
- ; AL saugomas dalmuo, AH liekana
- MOV bl, al ; issisaugau
- MOV bh, ah ; sias reiksmes
- ADD bl, 30h ; paverciu jas
- ADD bh, 30h ; i ASCII
- MOV ah, 02h
- MOV dl, bl ; isvedu dalmeni
- INT 21h
- MOV ah, 02h
- MOV dl, bh ; isvedu liekana
- INT 21h
- MOV ah, 9
- LEA dx, space ; spausdinu tarpa tarp skaiciu
- INT 21h
- MOV cl, 0 ; isvalau
- MOV bx, 0 ; skaitliukus
- INC si ; +1, kad imtu kita stringo simboli
- JMP tikrinu
- baigesi_ciklas:
- CMP cl, 0 ; jeigu buvo iskaiciuota simboliu, tai isspausdinu ji
- JE pabaiga
- CMP cl, 10 ; jeigu baigesi ciklas, o
- JAE last_call_big ; sukauptas ilgis didesnis, nei 9
- ADD cl, 30h ; paverciu skaiciu i ASCII...
- MOV ah, 02h
- MOV dl, cl ; ... ir ji spausdinu
- INT 21h
- ; ---------------
- ; --- pabaiga ---
- ; ---------------
- pabaiga:
- MOV al, 0
- ;-----------
- MOV ah, 4Ch
- INT 21h
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement