.MODEL small
.STACK
.DATA
init_ds macro ;Makro duomenu segmentui inicializuoti
mov ax,data
mov ds,ax
endm
out_str macro str ;Makro eilutes isvedimui
push ax
mov ah,09h
mov dx,offset str
int 21h
pop ax
endm
get_chr macro ;Makro simbolio ivedimui is klaviaturos
mov ah,1h
int 21h
endm
data segment para public 'data' ;duomenu segmento apraso pradzia
msg1 db 'Iveskite eilute: $'
msg2 db 10,13,'Pakeista eilute atrodo: $'
input db 200 dup('$')
data ends
stk segment stack
db 256 dup ('?')
stk ends
code segment para public 'code'
assume cs:code, ds:data, ss:stk
main proc
init_ds
out_str msg1
mov bx,offset input ;patalpiname i BX input eilutes pradzios adresa
inp: get_chr ;skaitome simbolius
cmp al,13 ;sulyginame ar ivestas simbolis nera lygus ENTER
je finish ;jeigu equal pereiname prie finish
cmp al,41h ;lyginame ivesta simboli su 'A' kodu
jb min ;jeigu reiksme mazesne tai pereiname prie next
cmp al,5ah ;lyginame ivesta simboli su 'Z' kodu
ja min ;jeigu reiskme didesne pereiname prie next
add al,20h ;jeigu reiskme yra tarp a-z tai atimdami 20h gausime Didziaja raide
jmp next
min:
cmp al,61h
jb next
cmp al,61h
ja next
sub al,20h
next: mov [bx],al ;patalpiname simboli is al i atminti adresu patalpintu registre bx
inc bx ;padidiname registro bx reiskme vienetu
jmp inp ;pereiname prie inp
finish: out_str msg2
out_str input
get_chr
mov ax,4c00h
int 21h
main endp
code ends
end main