# HG changeset patch # User Christian Urban # Date 1417180277 0 # Node ID 90ccc385c547860208fc6569fb86dac488cad818 # Parent 5cdb4d40eb805f6ad84ba8b58af39928bebb9600 updated diff -r 5cdb4d40eb80 -r 90ccc385c547 coursework/cw04.pdf Binary file coursework/cw04.pdf has changed diff -r 5cdb4d40eb80 -r 90ccc385c547 coursework/cw04.tex --- a/coursework/cw04.tex Mon Nov 24 09:06:27 2014 +0000 +++ b/coursework/cw04.tex Fri Nov 28 13:11:17 2014 +0000 @@ -48,7 +48,14 @@ \noindent where you might need to give the correct path to the class file. There are also other resources about Jasmin on the Internet, for example -\mbox{\url{http://goo.gl/Qj8TeK}} and \mbox{\url{http://goo.gl/fpVNyT}}\;.\bigskip + +\begin{center} +\url{http://www.ceng.metu.edu.tr/courses/ceng444/link/f3jasmintutorial.html} + +and + +\url{http://www.csc.villanova.edu/~tway/courses/csc8505/s2011/handouts/JVM%20and%20Jasmin.pdf} +\end{center} \noindent You need to submit a document containing the answers for the two questions @@ -59,15 +66,22 @@ in a txt-file or as pdf.\bigskip -\subsection*{Question 1 (marked with 2\%)} +\subsection*{Question 1 (marked with 5\%)} -You need to lex and parse WHILE programs and submit the assembler -instructions for the Fibonacci program and for the program you submitted -in Coursework 2 in Question 3. The latter should be so modified that -a user can input the upper bound on the console (in the original question -it was fixed to 100). +You need to lex and parse WHILE programs, and then generate +Java Byte Code instructions for the Jasmin assmebler. As +solution you need to submit the assembler instructions for the +Fibonacci and Factorial programs. Both should be so modified +that a user can input on the console which Fibonacci number +and which Factorial should calculated. The Fibonacci program +is given in Figure~\ref{fibs}. -\subsection*{Question 2 (marked with 2\%)} +\begin{figure}[t] +\lstinputlisting[language=while]{../progs/fib.while} +\caption{The Fibonacci program in the WHILE language.} +\end{figure} + +\subsection*{Question 2 (marked with 5\%)} Extend the syntax of you language so that it contains also \texttt{for}-loops, like @@ -128,7 +142,9 @@ \end{minipage} \end{center} - +\noindent +Note that in this program the variable \pcode{i} is used +twice. You need to make a decision how it should be compiled? \subsection*{Further Information} @@ -142,7 +158,7 @@ \begin{center} \begin{minipage}{10cm} -\begin{lstlisting}[language=Java,basicstyle=\ttfamily] +\begin{lstlisting}[language=Java,numbers=none] class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); @@ -159,14 +175,14 @@ \texttt{javap -v HelloWorld} \end{center} -\noindent -to see the assembler instructions of the Java byte code that has been generated for this -program. You can compare this with the code generated for the Scala -version of Hello World. +\noindent to see the assembler instructions of the Java byte +code that has been generated for this program. You can compare +this with the code generated for the Scala version of Hello +World. \begin{center} \begin{minipage}{10cm} -\begin{lstlisting}[language=Scala,basicstyle=\ttfamily] +\begin{lstlisting}[language=Scala,numbers=none] object HelloWorld { def main(args: Array[String]) { println("Hello World!") @@ -179,15 +195,17 @@ \subsection*{Library Functions} -You need to generate code for the commands \texttt{write} and \texttt{read}. This -will require the addition of some ``library'' functions to your generated code. The first -command even needs two versions, because you might want to write out an -integer or a string. The Java byte code will need two separate functions for this. -For writing out an integer, you can use the assembler code +You need to generate code for the commands \texttt{write} and +\texttt{read}. This will require the addition of some +``library'' functions to your generated code. The first +command even needs two versions, because you need to write out +an integer and string. The Java byte code will need two +separate functions for this. For writing out an integer, you +can use the assembler code \begin{center} \begin{minipage}{12cm} -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS, numbers=none] .method public static write(I)V .limit locals 5 .limit stack 5 @@ -207,7 +225,7 @@ \begin{center} \begin{minipage}{8cm} -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS, numbers=none] iload n invokestatic XXX/XXX/write(I)V \end{lstlisting} @@ -225,7 +243,7 @@ \begin{center} \begin{minipage}{12cm} -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS, numbers=none] .method public static writes(Ljava/lang/String;)V .limit stack 2 .limit locals 2 @@ -239,12 +257,12 @@ \end{center} \noindent -The code that needs to be generated for \texttt{write "some\_string"} commands +The code that needs to be generated for \code{write "some_string"} commands is \begin{center} \begin{minipage}{8cm} -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS,numbers=none] ldc "some_string" invokestatic XXX/XXX/writes(Ljava/lang/String;)V \end{lstlisting} @@ -260,7 +278,7 @@ \begin{center} \begin{minipage}{8cm} -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS,numbers=none] invokestatic XXX/XXX/read()I istore n \end{lstlisting} @@ -272,7 +290,7 @@ \begin{figure}[p]\small -\begin{lstlisting}[basicstyle=\ttfamily, numbers=none] +\begin{lstlisting}[language=JVMIS,numbers=none] .method public static read()I .limit locals 10 .limit stack 10 diff -r 5cdb4d40eb80 -r 90ccc385c547 slides/slides09.pdf Binary file slides/slides09.pdf has changed