Advertisement
MilanR

Untitled

Aug 21st, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; --Program treba da transformise RECENICU (mala slova u velika i velika slova u mala)
  2. ;   Na lokaciji K upisuje se broj karaktera koja nisu slova
  3. org 100h
  4.     MOV AX, 0; Praznimo AX jer ce nam trebati                                                                      
  5.     lea BX, RECENICA ;Ucitavamo adresu recenice da bi mogli redom da prolazimo kroz sve karaktere                                                                          
  6.  
  7.     petlja: ;Pravimo petlju, izlazak samo kada dodjemo do kraja recenice
  8.       cmp [BX], '#' ;Uporedjujemo da li smo dosli do terminalnog karaktera
  9.       je kraj     ;Ako jesmo, prekidamo program
  10.      
  11.       mov AL, [BX] ;Smestamo element u AL
  12.       push AX
  13.       call UPOREDI
  14.       pop AX
  15.       cmp AL, 0h
  16.       jne NijeMaloSlovo
  17.      ;Jeste Malo slovo, pretvaramo ga u veliko i nastavljamo dalje
  18.       sub [BX], 32
  19.       inc BX
  20.       jmp petlja
  21.      
  22.     NijeMaloSlovo:
  23.       cmp AL, 0ffh
  24.       jne NijeNiVelikoSlovo
  25.      ;Jeste Veliko slovo, pretvaramo ga u malo i nastavljamo dalje
  26.       add [BX], 32
  27.       inc BX
  28.       jmp petlja
  29.    
  30.     NijeNiVelikoSlovo:
  31.       inc K
  32.       inc BX ;Pripremamo adresu za ucitavanje sledeceg karaktera (inc bx je isto sto i add bx, 1)
  33.     jmp petlja
  34.  
  35. kraj:
  36.  
  37.  
  38. ret
  39.     RECENICA db 'pUSTAS_pIVO_zA_oVO#'
  40.     K db 0  
  41.    
  42.      
  43.      
  44. ; --Procedura koja iz steka uzima element i ubacuje sledeci:
  45. ;     -0h   - ako je element prema ASCII tablici MALO SLOVO
  46. ;     -0ffh - ako je element prema ASCII tablici VELIKO SLOVO
  47. ;     -taj element - ako element nije slovo (U zadatku pise bilo koja druga vrednost, razumeo sam da mi biramo)
  48.  
  49. UPOREDI proc
  50.     pop SI  ;Skidamo adresu koja se smestila u steku kada smo pozvali proceduru
  51.            ;(automatski upisuje u stek kada pozovemo proceduru, sluzi da bi program znao gde treba da nastavi kada zavrsi sa procedurom)
  52.     pop AX  ;Ucitavamo parametar (element, karakter) koji je prenet preko steka
  53.    
  54.     cmp AL, 'a' ;AX (2 bajta) je sacinjen iz AH (1 bajt) i AL (1 bajt), karakter smo smestili u AL
  55.     jb PROC_NijeMaloSlovo ;Ako karakter nije a,b,c... sigurno nije malo slovo
  56.    ;Ako karakter jeste iznad a,b,c..., izvrsava se kod na dole                                                                    
  57.     cmp AL, 'z' ;gledamo drugu granicu
  58.     ja PROC_NijeMaloSlovo ; Ako karakter je karakter iznad a,b,c....z onda sigurno nije malo slovo                                                                      
  59.    ;Do ove naredbe se moze stici samo ako je ispunjeno: 'a' <= AL <= 'z'
  60.     mov AL, 0h
  61.     jmp PROC_PronadjenoResenje;Ne uporedjujemo nista dalje nego vracamo resenje glavnom programu
  62.    
  63. PROC_NijeMaloSlovo:
  64.     cmp AL, 'A'  
  65.     jb PROC_NijeNiVelikoSlovo
  66.    
  67.     cmp AL, 'Z'
  68.     ja PROC_NijeNiVelikoSlovo
  69.    
  70.     ; 'A' <= AL <= 'Z'
  71.     mov AL, 0ffh
  72.     jmp PROC_PronadjenoResenje
  73.    
  74. PROC_NijeNiVelikoSlovo:
  75.     mov AL, AL ;Ova komanda nije neophodna nego sam napisao da bi izgledalo jasnije
  76. PROC_PronadjenoResenje:
  77.     push AX ;Kad nadjemo resenje, dodamo ga na stek (Moramo da pushamo ceo AX, ne moze samo AL jer su elementi u steku 2B)
  78.     push SI ;Vracamo adresu, da bi program znao gde da se vrati u glavnom programu      
  79.    
  80. ret  ;Povratak kontrole glavnom programu
  81. endp UPOREDI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement