Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #kamelija notacija
  2. #primer
  3. # oVO JE KAMelijA noTACIJa
  4. # Ovo Je Kamelija Notacija
  5. #svako pocetno slovo reci u recenici mora biti veliko, ostala mala
  6.  
  7. .section .data
  8.  
  9. string: .ascii "Unesite tekst: \0"
  10. string_len = . - string #automatski broji elemente niza, racuna za poslednju memorijsku lokaciju, ovo je konstanta
  11.  
  12. MAX = 101 #konstanta
  13.  
  14. string2: .fill MAX, 1, 0 #MAX je buffer (mem), 1 je velicina karaktera (1 byte)
  15. #MAX - maksimalno znakova moze da se upise
  16. #1 - velicina jednog karaktera (1 byte)
  17. #0 - sa njom popunjavam zauzete lokacije
  18. duzina: .long 0 #kad imam tip, to je promenjiva
  19. pocetak_reci: .long 0 #treba da radi kao true/false, 0 za false, 1 za true
  20.  
  21. .section .text
  22. .globl main
  23.  
  24. main:
  25.     #ispis / printf
  26.     movl $4, %eax
  27.     movl $1, %ebx
  28.     leal string, %ecx #isto kao movl $string, %ecx (adresa stringa u ecx)
  29.     #u leal stavljamo ono sto zelimo da se ispise!
  30.     movl $string_len, %edx
  31.     int $0x80
  32.     #$ je za konstante
  33.    
  34.     #unos / scanf
  35.     movl $3, %eax
  36.     movl $0, %ebx
  37.     leal string2, %ecx
  38.     movl $MAX, %edx
  39.     int $0x80
  40.     #string2 - u njega upisujem, bafer je MAX zato ide u edx
  41.     #posle unosa, duzina stringa se sacuva u registar %eax!!!!
  42.    
  43.     decl %eax #decrement (eax--), zbog novog reda (enter posle unosa), smanjimo duzinu stringa za 1
  44.     movl %eax, duzina
  45.     #%esi, %edi se koriste kao brojaci, npr kao int i u for petlji u C-u
  46.    
  47.     #hocu da esi pokazuje na pocetak stringa:
  48.     leal string2, %esi #sad mi je u esi prvi znak niza
  49.     #npr string NINA, leal, %esi pokaze na adresu slova N (pocetno), a (%esi) pokazuje N (dereferenciranje)
  50.    
  51. provera_slova:
  52.     cmpb $0, (%esi)
  53.     je ispis
  54.     cmpb $' ', (%esi)
  55.     je space
  56.     cmpb $'A', (%esi)
  57.     jb preskoci
  58.     cmpb $'Z', (%esi)
  59.     jbe veliko_slovo
  60.     cmpb $'a', (%esi)
  61.     jb preskoci
  62.     cmpb $'z', (%esi)
  63.     jbe malo_slovo
  64.    
  65.    
  66.    
  67. space:
  68.     movl $0, pocetak_reci
  69.     incl %esi
  70.     jmp provera_slova
  71.    
  72. preskoci:
  73.     incl %esi
  74.     jmp provera_slova
  75.    
  76. veliko_slovo:
  77.     cmpl $0, pocetak_reci #proveravam sa indikatorom, 1 je pocetak reci, 0 znaci da nije
  78.     je prvo_slovo
  79.     addb $32, (%esi)
  80.     incl %esi
  81.     jmp provera_slova
  82. prvo_slovo:
  83.     movl $1, pocetak_reci #nasao sam slovo posle space-a, stavi na 1 indikator za pocetak reci
  84.     incl %esi
  85.     jmp provera_slova #umesto ove dve linije moze i jmp preskoci
  86.    
  87. malo_slovo:
  88.     cmpl $1, pocetak_reci
  89.     je preskoci #jer malo ostaje malo
  90.     subb $32, (%esi)
  91.     movl $1, pocetak_reci #uvecavam samo pocetak reci
  92.     incl %esi
  93.     jmp provera_slova
  94. ispis:
  95.     movl $4, %eax
  96.     movl $1, %ebx
  97.     leal string2, %ecx
  98.     movl duzina, %edx
  99.     #promenjive se pisu bez $, a ko
  100.    
  101. kraj:
  102.     movl $1, %eax
  103.     movl $0, %ebx
  104.     int $0x80
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement