.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,61h ;lyginame ivesta simboli su 'a' kodu
;jb next ;jeigu reiksme mazesne tai pereiname prie next
;cmp al,7ah ;lyginame ivesta simboli su 'z' kodu
;ja next ;jeigu reiskme didesne pereiname prie next
;sub al,20h ;jeigu reiskme yra tarp a-z tai atimdami 20h gausime Didziaja raide
;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
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 next ;jeigu reiksme mazesne tai pereiname prie next
cmp al,5ah ;lyginame ivesta simboli su 'Z' kodu
ja next ;jeigu reiskme didesne pereiname prie next
add al,20h ;jeigu reiskme yra tarp a-z tai atimdami 20h gausime Didziaja raide
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