Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; --Program treba da transformise RECENICU (mala slova u velika i velika slova u mala)
- ; Na lokaciji K upisuje se broj karaktera koja nisu slova
- org 100h
- MOV AX, 0; Praznimo AX jer ce nam trebati
- lea BX, RECENICA ;Ucitavamo adresu recenice da bi mogli redom da prolazimo kroz sve karaktere
- petlja: ;Pravimo petlju, izlazak samo kada dodjemo do kraja recenice
- cmp [BX], '#' ;Uporedjujemo da li smo dosli do terminalnog karaktera
- je kraj ;Ako jesmo, prekidamo program
- mov AL, [BX] ;Smestamo element u AL
- push AX
- call UPOREDI
- pop AX
- cmp AL, 0h
- jne NijeMaloSlovo
- ;Jeste Malo slovo, pretvaramo ga u veliko i nastavljamo dalje
- sub [BX], 32
- inc BX
- jmp petlja
- NijeMaloSlovo:
- cmp AL, 0ffh
- jne NijeNiVelikoSlovo
- ;Jeste Veliko slovo, pretvaramo ga u malo i nastavljamo dalje
- add [BX], 32
- inc BX
- jmp petlja
- NijeNiVelikoSlovo:
- inc K
- inc BX ;Pripremamo adresu za ucitavanje sledeceg karaktera (inc bx je isto sto i add bx, 1)
- jmp petlja
- kraj:
- ret
- RECENICA db 'pUSTAS_pIVO_zA_oVO#'
- K db 0
- ; --Procedura koja iz steka uzima element i ubacuje sledeci:
- ; -0h - ako je element prema ASCII tablici MALO SLOVO
- ; -0ffh - ako je element prema ASCII tablici VELIKO SLOVO
- ; -taj element - ako element nije slovo (U zadatku pise bilo koja druga vrednost, razumeo sam da mi biramo)
- UPOREDI proc
- pop SI ;Skidamo adresu koja se smestila u steku kada smo pozvali proceduru
- ;(automatski upisuje u stek kada pozovemo proceduru, sluzi da bi program znao gde treba da nastavi kada zavrsi sa procedurom)
- pop AX ;Ucitavamo parametar (element, karakter) koji je prenet preko steka
- cmp AL, 'a' ;AX (2 bajta) je sacinjen iz AH (1 bajt) i AL (1 bajt), karakter smo smestili u AL
- jb PROC_NijeMaloSlovo ;Ako karakter nije a,b,c... sigurno nije malo slovo
- ;Ako karakter jeste iznad a,b,c..., izvrsava se kod na dole
- cmp AL, 'z' ;gledamo drugu granicu
- ja PROC_NijeMaloSlovo ; Ako karakter je karakter iznad a,b,c....z onda sigurno nije malo slovo
- ;Do ove naredbe se moze stici samo ako je ispunjeno: 'a' <= AL <= 'z'
- mov AL, 0h
- jmp PROC_PronadjenoResenje;Ne uporedjujemo nista dalje nego vracamo resenje glavnom programu
- PROC_NijeMaloSlovo:
- cmp AL, 'A'
- jb PROC_NijeNiVelikoSlovo
- cmp AL, 'Z'
- ja PROC_NijeNiVelikoSlovo
- ; 'A' <= AL <= 'Z'
- mov AL, 0ffh
- jmp PROC_PronadjenoResenje
- PROC_NijeNiVelikoSlovo:
- mov AL, AL ;Ova komanda nije neophodna nego sam napisao da bi izgledalo jasnije
- PROC_PronadjenoResenje:
- push AX ;Kad nadjemo resenje, dodamo ga na stek (Moramo da pushamo ceo AX, ne moze samo AL jer su elementi u steku 2B)
- push SI ;Vracamo adresu, da bi program znao gde da se vrati u glavnom programu
- ret ;Povratak kontrole glavnom programu
- endp UPOREDI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement