.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