\documentclass[a4paper]{article}
\textwidth 18cm \textheight 26cm \topmargin -3cm
\parindent 0.46in
\headsep 0.2in \oddsidemargin -2cm \evensidemargin 0cm
\hoffset0.8cm \voffset 1.8cm \pagestyle{empty}
\begin{document}

\begin{center}

\textbf{Prevodioci i interpretatori - Februar 2004.}\\
prakti\v cni deo ispita
\end{center}
\begin{enumerate}
\item
Neka je dat asemblerski jezik, za fiktivni nula-adresni
ra\v cunar.
Asembler podr\v zava slede\'ce instrukcije

\begin{tabular}{|l|l|}
\hline
\verb"push" $x$&postavlja $x$ na stek \\
\verb"pop" $x$&skida vrednost sa vrha steka i postavlja je u promenjivu $x$ ako je navedena \\
\verb"add" &skida dve vrednosti sa vrha steka i njihov zbir postavlja na stek\\
\verb"sub" &skida dve vrednosti sa vrha steka i njihovu razliku postavlja na stek\\
\verb"mul" &skida dve vrednosti sa vrha steka i njihov proizvod postavlja na stek\\
\verb"div" &skida dve vrednosti sa vrha steka i njihov koli\v cnik postavlja na stek\\
\verb"jmp" $labela$&bezuslovni skok na labelu $labela$ \\
\verb"jz" $labela$&skok na navedenu labelu ukoliko je na vrhu steka 0\\
\verb"jnz" $labela$&skok na navedenu labelu ukoliko na vrhu steka nije 0\\
\verb"cmp" & skida dve vrednosti sa vrha steka i postavlja 1 ako su jednake i 0
ako nisu\\
\verb"cmpLT" & skida dve vrednosti sa vrha steka i postavlja 1 ako je prva
manja od druge i 0 ako nije\\
\verb"cmpGT" & skida dve vrednosti sa vrha steka i postavlja 1 ako je prva
ve\' ca od druge i 0 ako nije\\
\verb"print" & \v stampa vrednost sa vrha steka\\
\verb"stop" & prekida izvr\v savanje programa\\
\hline
\end{tabular}

Dopu\v stene labele su oblika \verb"Lxxx : " gde su \verb"x"
cifre.
\end{enumerate}

\vskip 3cm
\begin{center}
\textbf{Prevodioci i interpretatori - Februar 2004.}\\
prakti\v cni deo ispita
\end{center}
\begin{enumerate}
\item
Neka je dat asemblerski jezik, za fiktivni nula-adresni
ra\v cunar.
Asembler podr\v zava slede\'ce instrukcije

\begin{tabular}{|l|l|}
\hline
\verb"push" $x$&postavlja $x$ na stek \\
\verb"pop" $x$&skida vrednost sa vrha steka i postavlja je u promenjivu $x$ ako je navedena \\
\verb"add" &skida dve vrednosti sa vrha steka i njihov zbir postavlja na stek\\
\verb"sub" &skida dve vrednosti sa vrha steka i njihovu razliku postavlja na stek\\
\verb"mul" &skida dve vrednosti sa vrha steka i njihov proizvod postavlja na stek\\
\verb"div" &skida dve vrednosti sa vrha steka i njihov koli\v cnik postavlja na stek\\
\verb"jmp" $labela$&bezuslovni skok na labelu $labela$ \\
\verb"jz" $labela$&skok na navedenu labelu ukoliko je na vrhu steka 0\\
\verb"jnz" $labela$&skok na navedenu labelu ukoliko na vrhu steka nije 0\\
\verb"cmp" & skida dve vrednosti sa vrha steka i postavlja 1 ako su jednake i 0
ako nisu\\
\verb"cmpLT" & skida dve vrednosti sa vrha steka i postavlja 1 ako je prva
manja od druge i 0 ako nije\\
\verb"cmpGT" & skida dve vrednosti sa vrha steka i postavlja 1 ako je prva
ve\' ca od druge i 0 ako nije\\
\verb"print" & \v stampa vrednost sa vrha steka\\
\verb"stop" & prekida izvr\v savanje programa\\
\hline
\end{tabular}

Dopu\v stene labele su oblika \verb"Lxxx : " gde su \verb"x"
cifre.
\end{enumerate}


\newpage
Neka je, dalje, dat mali programski jezik koji podr\v zava samo
celobrojni tip podataka i na njemu definisane operatore
\verb"+", \verb"-", \verb"*", \verb"/", prefiksni i postfiksni operator
inkrementiranja (\verb"++")
i dekrementirajnja (\verb"--")kao i relacijske operatore
\verb"<", \verb">", \verb"<=", \verb">=", \verb"==". Svi operatori
imaju isto zna\v cenje kao i u jeziku C. Od kontrolnih struktura
jezik podr\v zava uslovno grananje (if-then i if-then-else) tipa
kao i while petlju pri \v cemu je sintaksa ista kao u jeziku C.
Definisana je jo\v s i ugradjena funkcija \verb"print" sa jednim
celobrojnim argumentom koja slu\v zi sa \v stampanje.

Napraviti program koji vr\v si prevodjenje sa datog programskog
jezika na dati asembler. Npr.

\begin{verbatim}
                                             push 0
                                             pop x
                                      L000:
                                             push x
                                             push 3
                                             compLT
                x=0;                         jz L001
                while (x<3)                  push x
                {  x=x+1;                    push 1
                   print(x);                 add
                }                            pop x
                                             push x
                                             print
                                             jmp L000
                                       L001:
                                             stop
\end{verbatim}

\vskip 1cm

Neka je, dalje, dat mali programski jezik koji podr\v zava samo
celobrojni tip podataka i na njemu definisane operatore
\verb"+", \verb"-", \verb"*", \verb"/", prefiksni i postfiksni operator
inkrementiranja (\verb"++")
i dekrementirajnja (\verb"--")kao i relacijske operatore
\verb"<", \verb">", \verb"<=", \verb">=", \verb"==". Svi operatori
imaju isto zna\v cenje kao i u jeziku C. Od kontrolnih struktura
jezik podr\v zava uslovno grananje (if-then i if-then-else) tipa
kao i while petlju pri \v cemu je sintaksa ista kao u jeziku C.
Definisana je jo\v s i ugradjena funkcija \verb"print" sa jednim
celobrojnim argumentom koja slu\v zi sa \v stampanje.

Napraviti program koji vr\v si prevodjenje sa datog programskog
jezika na dati asembler. Npr.

\begin{verbatim}
                                              push 0
                                              pop x
                                        L000:
                                              push x
                                              push 3
                                              compLT
                 x=0;                         jz L001
                 while (x<3)                  push x
                 {  x=x+1;                    push 1
                    print(x);                 add
                 }                            pop x
                                              push x
                                              print
                                              jmp L000
                                        L001:
                                              stop
\end{verbatim}


\end{document}
