rendered paste body.model small
.stack 100h ;isskiriamas 256 bit stekas
.data
msg1 db 'Iveskite eilute: $'
msg2 db 'Ilgiausio zodzio ilgis: $'
msg3 db 'Nebuvo ivesta duomenu! $'
eilute db 255, 255 dup (0)
nauja db 13,10,'$'
.code
start:
mov ax, @data
mov ds, ax
mov ah, 09h ;iraso i 8 bit reg reiksme 09h
lea dx, msg1 ;perkelia msg1 bit-string`a i reg dx
int 21h ;dos f-ja, kadangi reg ah reiksme yra 9, tai isves reg. dx reiksme
mov ah, 0Ah ;i reg ah perkelia reiksme 0Ah
lea dx, eilute ;perkelia eilute reiksme i reg dx
mov si, dx ;dx reg. reiksme perkelia i reg. si
int 21h ;kadangi reg ah saugo reiksme 0Ah tai nuskaitys komandine eilute
mov ah, 09h ;
lea dx, nauja ;perkelia nauja reiksme i reg dx
int 21h
inc si ;padidina si reg reiskme vienetu
mov cl, [si]
inc si
cmp cl, 0 ;tikrinama ar eilute nera tuscia, ar skaitliuko CL reiksme nelygi 0
je Neivesta
sub dx, dx ;apnulinam dx, jis bus zodzio ilgis
sub bx, bx ;ilgiausio zodzio ilgis
ciklas:
dec cx
mov ah, ' '
cmp [si], ah ;jei zodzio pabaiga. ar ne tarpas
je ilgis ;
inc dx
cmp cx, 0h ;jei paskutinis eilutes simbolis
je ilgis ;
inc si ;kitas eilutes simbolis
jmp ciklas ;tesiam cikla
ilgis:
cmp bx, dx
jb keisti
sub dx, dx ;dx = 0, zodzio ilgis
inc si ;kitas eilutes simbolis
cmp cx, 0h ;jei eilute nesibaige
ja ciklas ;sokam i cikla
je print ;jei eilute baiges, spausdinam
keisti:
mov bx, dx
sub dx, dx ;dx = 0, zodzio ilgis
inc si ;kitas eilutes simbolis
cmp cx, 0h ;jei eilute nesibaige
ja ciklas ;sokam i cikla
je print ;jei eilute baiges, spausdinam
Neivesta:
lea dx, msg3 ;uzkraunamas pran3 adresas i DX registra
mov ah, 09h ;kreipiamasi su 09h funkcija spausdinimui
int 21h ;pertraukimas
mov ax, 4c00h ;isejimas
int 21h
print:
mov ah, 09h ;msg2 isvedimas ekrane
lea dx, msg2
int 21h
;mov dx, bx
;add dl, 30h ;va cia kazka nuveikt reikia... ;) !@#!@#!@#$@#%#$@#$!#!@#!@#@!#!@#!@#
;mov ah, 02h
;int 21h
MOV AX, BX
MOV DX, 0
MOV AH, 0
MOV BL, 100
DIV BL
CMP AL, 0
JE Praleisti
PUSH AX
ADD AL, 30h
MOV AH, 0Eh
INT 10h
MOV DX, 1
POP AX
;---------------------------------------
Praleisti:
MOV AL, AH
MOV AH, 0
MOV BL, 10
DIV BL
CMP AL, 0
JNE Spausdinti
CMP DX, 1
JNE Praleisti2
;---------------------------------------
Spausdinti:
PUSH AX
ADD AL, 30h
MOV AH, 0Eh
INT 10h
POP AX
;---------------------------------------
Praleisti2:
MOV AL, AH
ADD AL, 30h
MOV AH, 0Eh
INT 10h
;---------------------------------
mov ah, 09h ;nauja eilute
lea dx, nauja
int 21h
mov ax, 4c00h ;isejimas
int 21h
end start