ZADATAK 1:

 

       Neka je dat sledeći asemblerski kod:

 

Title zad1    

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        broj     db 121

        por1     db 'sadr ax :'

        sad1     db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad1 proc far

        push ds   

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov al, broj   

        inc al

        xor bl, bl

        dec bl

        add al, bl

        mov sad1, al

  ret            

zad1 endp              

cseg    ends           

        end zad1            

       

Koji će biti sadržaj lokacije sad1 nakon izvršenja programa?

 

Rešenje:

 

       Nakon učitanja broja 121 u registra al vrši se njegovo inkrementiranje za 1 pa je njegov sadržaj 122. Nakon toga se čisti registar bl (xor bl, bl), a zatim se on umanjuje za 1(0-1=-1). Na kraju se sadržaj bl doda na al i upiše u lokaciju sad1, pa je sadržaj ove lokacije 122-1=121=79(heksa).

 

ZADATAK 2:

 

       Neka su dati brojevi broj1=77 i broj2=22 u data segmentu. Napisati program kojim se nalazi njihov zbir(zbir), razlika(raz), proizvod(pro) i odnos(del)

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad2 

;

;Definisanje stek-segmenta

;

sseg segment stack

        db 256 dup (?)  ;Rezervisanje prostora za stek

sseg ends

dseg segment

        broj1    db 77

        broj2    db 22

        por1     db 'zbir :'

        zbir     db ?

        por2     db 'razlika :'

        raz      db ?

        por3     db 'proizvod :'

        pro      dw ?

        por4     db 'odnos :'

        del      db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad2 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov al, broj1   

        add al, broj2

        mov zbir, al

        mov al, broj1

        sub al, broj2

        mov raz, al

        xor ax, ax

        mov al, broj1

        mul broj2

        mov pro, ax

        xor ax, ax

        mov al, broj1

        div broj2

        mov del, al

        ret            

;

zad2 endp              

cseg    ends           

        end zad2            

   

Za množenje ovih bojeva bilo je neophodno da se rezerviše lokacija u dužini jedne reči (pro dw ?), budući da je rezultat množenja veći od jednog bajta.

 

ZADATAK 3:

 

Napisati program kojim se sabiraju neparni brojevi od 1 do 100.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad3  

;

;Definisanje stek-segmenta

;

sseg segment stack

        db 256 dup (?)  ;Rezervisanje prostora za stek

sseg ends

dseg segment

        por1     db 'zbir :'

        zbir     dw ?

        broj     db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad3 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov cx, 100

        mov zbir, 0

        mov broj, 1

a1:

        mov bl, 2

        mov al, broj

        div bl

        cmp ah, 0

        je a2

        xor ax, ax

        mov al, broj

        add zbir, ax

a2:

        inc broj

loop a1

        ret            

;

zad3 endp              

cseg    ends           

        end zad3            

       

Rešenje zadataka se nalazi upotrebom loop ciklusa ostvarenog pomoću cx registra. Na početku programa lokacija za zbir se postalja na nulu kao i početni broj na 1. Instrukcijama div bl i cmp ah, 0 ispitujemo da li se radi o parnom broju. Ako je paran ide se na labelu a2 inače se sabira broj u zbir. Na kraju se uvećava broj za 1 (uzima sledeći broj). Primetite da bi podelili broj sa 2 nismo mogli pisati div  2 budući da to nije dozvoljeno. Traženi rezultat je 2500 što je heksa 9C4.

U slučaju ako bi se tražio zbir parnih brojeva onda bi bila potrebna mala modifikacija koda i to:

 

a1:

        mov bl, 2

        mov al, broj

        div bl

        cmp ah, 1

        je a2

        xor ax, ax

        mov al, broj

        add zbir, ax

a2:

        inc broj

 

taj je zbir 2550 ili u heksa kodu 9F6.

 

 

ZADATAK 5:

 

Neka su data dva broja broj=1234 i broj1=142. Napisati program kojim se oni dele. Rezultat delenja stavi u lokaciju kol1 a ostatatak delenja u lokaciju ost1.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad5

sseg segment stack

        db 256 dup (?)  ;Rezervisanje prostora za stek

sseg ends

dseg segment

        broj     dw 1234

        broj1    dw 142

        por1     db 'kolic :'

        kol1     dw ?

        por2     db 'ost :'

        ost1     dw ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad5 proc far

        push ds

        mov  ax, 0

        push ax

;

        mov  bx, dseg

        mov  ds, bx

;

        mov ax, broj   

        div broj1

        mov kol1, ax

        mov ost1, dx

;

        ret

;

zad5    endp

cseg    ends

        end zad5

 

ZADATAK 6:

 

Neka je dat registar ax u koji je  upisan broj 791. Napiši program kojim će biti pomnožen sadržaj ovog registra sa 4 ne koristeći instrukciju mul. Rezultat upiši u lokaciju mno.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad6

sseg segment stack

        db 256 dup (?)  ;Rezervisanje prostora za stek

sseg ends

dseg segment

        broj     dw 791

        por1     db 'proizvod :'

        mno      dw ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad6 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov ax, broj   

        mov cx, 2

a1:

        shl ax,1

        loop a1

        mov mno, ax

        ret

;

zad6    endp     

cseg    ends     

        end zad6      

       

Množenje sa brojem 4 znači pomeranje u levo za dva mesta sadržaja registra ax, a što smo ostvarili uputrebom loop instrukcije i instrukcije za pomeranje u levo registra ax, shl. Traženi rezultat je 791*4=3164=C5C(heksa).

 

ZADATAK 7:

 

Neka je dat registar ax u koji je  upisan broj 791. Napiši program kojim će biti nađen broj binarnih jedinica u tome registru, kao i broj nula.  Broj jedinica  upiši u lokaciju brojjed a nula u brojnul.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad7

sseg segment stack

        db 256 dup (?)  ;Rezervisanje prostora za stek

sseg ends

dseg segment

        broj     dw 791

        por1     db 'broj jedinica :'

        brojjed  db ?

        por2     db 'broj nula :'

        brojnul  db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad7 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov ax, broj   

        mov cx, 16

        mov brojjed, 0

a1:

        shl ax,1

        jc a2

        jmp a3

a2:

        add brojjed, 1

a3:

        loop a1

        mov al, 16

        sub al, brojjed

        mov brojnul, al

        ret

;

zad7    endp     

cseg    ends     

        end zad7      

       

Broj 791 je binarno 0000 0011 0001 0111 i takav je zapisan u ax registrar. Koristićemo instrukcije shr za pomeranje u desno. Tada

će bnarna cifra  koja izlazi iz registra ax ulaziti u CF fleg. Ispitujemo da li je on jednak 0 (jc a3). Ako jeste brojjed uvećavamo za 1. Inače navedeni ciklus radimo 16 puta dok svi brojevi neizađu iz registra. Broj nula se dobija kada se od broja 16 odbije brojjedinica.

U slučaju da je zadati broj bio -791 onda bi taj broj bio prestavljen u njegovom komplementu dva:

 

                1111 1100 1110 1000

        +                                       1

             -----------------------------                      

                1111 1100 1110 1001

 

pa bi broj jedinica bio 11(heksa B) a broj nula 5.

             

ZADATAK 8:

 

Šta kao rezultat daju sledeće instrukcije:

          not ax

          inc ax

pod uslovom da je u registru ax upisan ceo neoznačen broj.

 

Rešenje:

 

       Instrukcija not ax negira svaki bit u registru ax a dodavanjem na kraju jedinice (inc ax) dobićemo komplement 2 datog broja u registru.

    U slučaju da je bio označen broj u registru ax onda bi instrukcije:

       dec ax

       not ax

       dale ceo broj od njegovog komplementa 2.

 

 

ZADATAK 9:

 

Neka su date sledeće instrukcije:

 

        mov al, 66   

        mov cx, 2

    a1:

        ror al,1

        loop a1

        inc al

 

       Koji će biti broj upisan u registar al.

      

Rešenje:

 

       Broj 66 u binarnom obliku je 01000010. Iz instrukcija se vidi da će biti izvrešena dvostruka rotacija u desno registra al pa je njegov sadržaj:    

 

                00100001  - posle prve rotacije

                10010000 - posle druge

                +            1  (inc  al)

           ------------------

       10010001 (budući da je označen)

-                                   -             1

         -------------------

                 10010000

                 01101111=111 decimalno

 

ZADATAK 10:

 

Neka je data promenljiva niz sa elementima -12, 44,17, 11, -13. Napiši program kojim će biti prebrojan ukupan broj negativnih elemenata i taj broj upiši u memorijsku lokaciju brneg. Brojevi su zapisani u data segmentu na nivou bajta.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad10

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      db -12, 44, 17, 11, -13

        por1     db 'broj negativnih :'

        brneg    db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad10 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov brneg, 0   

        mov cx, 5

        mov si, 0

a1:

        mov al, niz[si]

        cmp al, 0

        jge a2

        add brneg, 1

a2:     inc si

        loop a1

        ret

;

zad10   endp     

cseg    ends      

        end zad10      

       

       Iz programa se vidi da smo na početku poništili memorijsku lokaciju brneg, stavili brojač na 5(pet članova niza) i indeks registar si na nulu kako bi počeli ispitivanje od prvog člana. Nakon toga smo u registar al upisivali element niza i ispitivali da li je veći ili jednak nuli. Ako jeste išli smo na sledeći član inače uvećavali smo broj negativnih za 1 (add brneg, 1).

 

 

ZADATAK 11:

 

Neka je data promenljiva niz sa elementima 11, 22, 8, 98, 102, 13. Napiši program kojim će biti prebrojan ukupan broj parnih brojeva u nizu i taj broj upiši u memorijsku lokaciju brpar. Brojevi su zapisani u data segmentu na nivou bajta.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad11

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      db 11, 22, 8, 98, 102, 13

        por1     db 'broj parnih :'

        brpar    db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad11 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov brpar, 0   

        mov cx, 6

        mov si, 0

a1:

        mov al, niz[si]

        mov bl, 2

        div bl

        cmp ah, 0

        ja a2

        add brpar, 1

a2:     inc si

        loop a1

        ret

;

zad11   endp     

cseg    ends     

        end zad11      

       

       Suština rešenja ovog zadatka je slična prethodnom stom razlikom što ispitujemo da li je član niza paran ili nije (div bl). Ako je paran lokaciju blpar uvećavamo za 1.

 

ZADATAK 12:

 

Neka je data promenljiva niz sa elementima 11, 22, 8, 98, 102, 13. Napiši program kojim će biti formiran niz1 od elemenata niza koji su veći od 20. Brojevi su zapisani u data segmentu na nivou bajta.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

         Title zad11

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      db 11, 22, 8, 98, 102, 13

        por1     db 'novi niz :'

        niz1     db 6 dup (?)

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad12 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov cx, 6

        mov si, 0

        mov di, 0

a1:

        mov al, niz[si]

        cmp al, 20

        jbe a2

        mov niz1[di], al

        inc di

a2:     inc si

        loop a1

        ret

;

zad12   endp     

cseg    ends     

        end zad12      

       

       Iz rešenja se vidi da smo rezervisali prostor za niz1 od 6 bajta. Na početku programa oba indeksa si i di su postavljena na nulu. Ako je broj veći od dvadest taj član niza se upisuje u niz1 a istovremeno uveća odredišni indeks za 1.

 

ZADATAK 13:

 

Neka su  data dva niza ito:  niz sa elementima 11, 22, 8, 98, 102, 13 i niz1 sa lementima 7, 33, 8, 21,102, 67. Napiši program kojim će biti prebrojan ukupan broj istih brojeva u obadva niza na istoj pozicij i taj broj upiši u memorijsku lokaciju bristi. Brojevi su zapisani u data segmentu na nivou bajta.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad11

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      db 11, 22, 8, 98, 102, 13

        niz1     db 7, 33, 8, 21, 102, 67

        por1     db 'broj isti :'

        bristi   db ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad13 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov cx, 6

        mov si, 0

        mov bristi, 0

a1:

        mov al, niz[si]

        cmp al, niz1[si]

        jne a2

        add bristi, 1

a2:     inc si

        loop a1

        ret

;

zad13   endp     

cseg    ends      

        end zad13      

       

       Suština rešenja ovog zadatka se nalazi u uzimanju jednog po jednog člana niza i njihovom ispitivanju da li su jednaki. Ako su jednaki lokacija bristi se uvaćava za 1. Jasno je da je rezultat 2(isti su članovi 8 i 102).

 

ZADATAK 14:

 

Neka su  data dva niza ito:  niz sa elementima a1, a2, a3, a4, a5, i a6 (11, 22, 8, 98, 102, 13)  i niz1 sa elementima b1, b2, b3, b4, b5 i b6 (7, 33, 8, 21,102, 67). Napiši program kojim će biti formiran niz2 kao: a1, b1, a2, b2, ... a6, b6.

Brojevi su zapisani u data segmentu na nivou bajta.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad14

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      db 11, 22, 8, 98, 102, 13

        niz1     db 7, 33, 8, 21, 102, 67

        por1     db 'novi niz :'

        niz2     db 12 dup (?)

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad14 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov cx, 6

        mov si, 0

        mov di, 0

a1:

        mov al, niz[si]

        mov niz2[di], al

        inc di

        mov al, niz1[si]

        mov niz2[di], al

        inc di

a2:     inc si

        loop a1

        ret

;

zad14   endp     

cseg    ends     

        end zad14      

       

Rešenje zadatka se nalazi u tome da se posle učitavanja elementa niza a u niz2 uveća za jedan odredišni indeks, a zatim uzima odgovarjući element iz niza b i premešta u niz2, kada se tako|e uveđa za jedan odredišni indeks.

 

ZADATAK 15:

 

Neka je dat  niz sa elementima 11, 131, -456, 1234, -12, 567, 1050. Napiši program kojim će biti sabrani njegovi članovi i taj broj upiši u memorijsku lokaciju zbir. Brojevi su zapisani u data segmentu na nivou reči.

 

Rešenje:

 

       Program za rešenje ovog zadataka je:

 

Title zad15

sseg segment stack

        db 256 dup (?) 

sseg ends

dseg segment

        niz      dw 11, 131, -456, 1234, -12, 567, 1050

        por1     db 'zbir je :'

        zbir     dw ?

dseg ends

cseg segment

assume cs:cseg, ds:dseg, ss:sseg

zad15 proc far

;

        push ds        

        mov  ax, 0     

        push ax        

;

        mov  bx, dseg  

        mov  ds, bx    

;

        mov cx, 7

        mov si, 0

        mov zbir, 0

a1:

        mov ax, niz[si]

        add zbir, ax

        add si, 2

a2:

        loop a1

        ret

;

zad15   endp     

cseg    ends     

        end zad15      

       

Rešenje zadatka je prosto. U memorijsku lokaciju zbir sabiramo članove niza. Budući da su brojevi upisani na nivou reči to se izvorišni indeks mora uvećavati za dva. Inače je traženi zbir 2525=9DD(heksa).

 

 

ZADATAK 16:

 

       Neka je data niska znakova definisana u data segmentu. Napisati program koji će:

a)         Premestiti string iz data segmenta u ekstra segment

b)         Odrediti dužinu niske

c)          Napisati zadatu nisku naopako

d)         Odrediti ukupan broj slova u jednoj i drugoj niski koja su na istom mestu jednaka.

 

       Niska se završava znakom '$' koji ne ulazi u njenu dužinu.

 

REŠENJE:

 

Budući da se niska mora premestiti iz data segmenta u ekstra segmenat to smo u ovom programu koristili sva četiri segmenta registra. Za rešenje postavljenog zadataka korišćene su sledeće procedure:

-                     NISKA glavna programska procedura iz koje se pozivaju ostale i prikazuju dobijeni rezultati.

-                     PRENOS u kojoj se prenosi niska iz data u ekstra segment.

-                     DUZINA u kojoj se sračunava dužina niske.

-                     OBRNUT u kojoj se zadata niska formira naopako.

-                     ISTI u kojoj se računa broj slova koja su ista na istom mestu.

Opisaćemo ukratko glavne programske procedure.

 

Procedura PRENOS

U ovoj proceduri se prenosi izvorišna niska(STR) iz data segmenta u odredišnu nisku(STR0) koristeći instrukciju MOVSB, pri čemu je u registar CX upisana njena dužina. Ispred instrukcije MOVSB nalazi se instrukcija REP koja ponavlja ovu instrukciju sve dok registra CX ne bude jednak nuli.

 

Procedura DUZINA

         U ovoj proceduri koristimo instrukciju SCAB koja ispituje da li je tekući član niske([SI]) jednak sadržaju registra AL, u koji smo prethodno upisali identifikaciju kraja niske '$'. U slučaju ako je jednak došli smo do kraja niske i završavamo navedenu proceduru inače uvećavamo sadržaj registra CH za jedan i uzimamo sledeći član. Registar CH nam služi kao brojač za sračunavanje njene dužine.

 

Procedura OBRNUT

         U  proceduri uzimamo prvi član niske STR i stavljamo ga na zadnje mesto niske STR1, drugi na predzadnji itd., dok će njen zadnji član biti premešten na prvo mesto u niski STR1. To smo postigli korićenjem registara SI i DI, pri čemu se prvi inkrementira, dok se drugi dekrementira nakon izvršenog prenosa člana niske.

 

Procedura ISTI

         U ovoj proceduri instrukcijom LODS prezimamo prvi član zadate niske STR i poredimo ga istim članom niske napisane obrnuto. Ako su jednaki uvećavamo sadržaj brojača (registar DH), i prelazimo na sledeći član prve i druge niske. Zbog korišđenja instrukcije LODS automatski je inkrementiran registar SI, dok smo registar DI morali sami dekrementirati.

TITLE prog16; Instrukcije za rad sa niskama

;

sseg segment stack

        db 256 dup (?) ;Rezervisanje prostora za stek

sseg ends

;

eseg segment

        str0      db 20 dup(?)             ;Niska u ES

        str1      db 19 dup(?)             ;Niska napisana obrnuto

        estr1     db '$'

eseg ends

;

dseg segment

        str       db 'Ovo je zadata niska$'        ;Zadata niska u DS

        poruka0   db 'Zadata niska u DS je   : $'  ;Poruka

        poruka    db 'Duzina date niske je   : $'  ;Poruka

        duz       db 1 dup(?)                      ;Polje za duzinu

        pp0       db ' $'

        poruka1   db 'Niska napisana obrnuto : $'  ;Poruka

        pp1       db ' $'

        poruka2   db 'Broj slova na ist. mes.: $'  ;Poruka

        brs       db 1 dup(?)                      ;Polje za broj isti

        pp2       db ' $'

dseg ends

;

cseg segment

;

assume cs:cseg, ds:dseg, ss:sseg, es:eseg

;

niska proc far

;

        push ds                 ;Povratna adresa segmenta ide u stek

        mov  ax, 0

        push ax                 ;Nula-povratna adresa ide u stek

        mov  bx, dseg

        mov  ds, bx

 

        mov  bx, eseg           ;Inicijalizacija ekstra segmenta

        mov  es, bx

 

        mov ah, 00              ;Postavljanje video moda

        mov al, 3

        int 10h

 

        mov ah, 11              ;Postavljanje palete boja

        mov bh, 0

        mov bl, 4

        int 10h

 

        call prenos            ;Poziv procedure za prenos iz DS u ES

        mov   dh, 10

        mov   dl, 15

        call  pozicija

        mov   dx, offset poruka0

        call  prikaz

        mov   bx, eseg

        mov   ds, bx

        mov   dx, offset str0

        call  prikaz           ;Prikaz prenesene niske

 

        mov   bx, dseg

        mov   ds, bx

        mov   bx, eseg

        mov   es, bx

 

        mov   dh, 12

        mov   dl, 15

        call pozicija

 

        mov  dx, offset poruka

        call prikaz             ;Stampanje poruke

        call duzina             ;Poziv procedure za duzinu

        xor  ah, ah

        mov  al, duz           

        call stampa             ;Stampanje duzine niske

 

        mov  dh, 14

        mov  dl, 15

        call pozicija

        mov  dx, offset poruka1

        call prikaz

 

        call obrnut             ;Poziv procedure za obrnuta slova

 

        mov  bx, eseg

        mov  ds, bx

        mov  dx, offset str1

        call prikaz             ;Prikaz obrnute niske

 

        mov  bx, dseg

        mov  ds, bx

        mov  bx, eseg

        mov  es, bx

 

        mov  dh, 16

        mov  dl, 15

        call pozicija

        mov  dx, offset poruka2

        call prikaz

 

        call  isti               ;Poziv procedure za ista slova

        xor  ah, ah

        mov  al, brs

        mov  duz, al             ;Broj ostih ide u ax

        call stampa              ;Stampanje broja istih

 

        mov   dh, 23

        mov   dl, 00

        call  pozicija

 

        ret

niska   endp

;

;-------------------------------------------

;   Prenos niske u ekstra segment          |

;-------------------------------------------

prenos  proc near

        lea si, str

        lea di, es:str0

        mov cx, 20

    rep movsb str0, str

        ret

prenos  endp

;

;-------------------------------------------

;   Odredjivanje duzine niske              |

;-------------------------------------------

duzina  proc near

        push  ax

        push  di

        lea   di, es:str0

        cld                     ;Brise se fleg pravca

        mov   al, '$'           ;Ogranicavac niske ide u al

        xor   cx, cx            ;Brise se cx

cik:    mov   bl, [di]          ;Jedan znak ide u bl

        scasb

        je    gotovo

        inc   ch                ;Ako nije uvecaj cx i uzmi novi znak

        jmp   cik

gotovo:

        mov   duz, ch           ;Pamti se duzina niske

        pop   di                ;Vracanje registara sa steka

        pop   ax

        ret

duzina  endp

;

;-------------------------------------------

;   Prenos niske u obrnutom redosledu      |

;-------------------------------------------

obrnut  proc near

        push  ax

        push  di

        push  si

        mov   cx, 19

        mov   si, 0

        mov   di, 18

cik1:   mov al, str[si]

        mov   str1[di], al      ;Dan znak ide u bl

        dec   di

        inc   si                ;Ako nije uvecaj cx i uzmi novi znak

        loop  cik1

gotovo1:pop   si

        pop   di                ;Vracanje registara sa steka

        pop   ax

        ret

obrnut  endp

;-------------------------------------------

;   Procedura za trazenje istih slova      |

;-------------------------------------------

isti proc near

        push  ax

        push  di

        push  si

        cld                     ;Brise se fleg pravca

        xor  dx, dx

        mov  cx, 19

        mov  si, 0

        mov  di, 0

pon2:   lods str[si]

        cmp  al, str1[di]

        je   pon3

        jmp  pon4

pon3:   inc  dh

pon4:

        inc di

        loop pon2

        mov  brs, dh

        pop  si

        pop  di                ;Vracanje registara sa steka

        pop  ax

        ret

isti  endp

;

include bibl1.asm

cseg ends

     end niska