| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Tue, 30 May 2023 16:58:06 +0100 | |
| changeset 909 | a29d74fb8697 | 
| parent 905 | d8f870aad77d | 
| child 910 | 926d73d76989 | 
| permissions | -rw-r--r-- | 
| 630 | 1  | 
% !TEX program = xelatex  | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
2  | 
\documentclass{article}
 | 
| 
309
 
640e4a05cd9b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
298 
diff
changeset
 | 
3  | 
\usepackage{../style}
 | 
| 
216
 
f5ec7c597c5b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
214 
diff
changeset
 | 
4  | 
\usepackage{../langs}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
5  | 
|
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
6  | 
\begin{document}
 | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
7  | 
|
| 
354
 
86b2aeae3e98
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
8  | 
%https://github.com/Storyyeller/Krakatau  | 
| 
 
86b2aeae3e98
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
9  | 
%https://docs.oracle.com/javase/specs/jvms/se7/html/  | 
| 
 
86b2aeae3e98
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
333 
diff
changeset
 | 
10  | 
|
| 706 | 11  | 
% Jasmin Tutorial  | 
12  | 
%http://saksagan.ceng.metu.edu.tr/courses/ceng444/link/jvm-cpm.html  | 
|
13  | 
||
| 751 | 14  | 
\section*{Coursework 4}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
15  | 
|
| 836 | 16  | 
\noindent This coursework is worth 15\% and is due on \cwFOUR{}
 | 
| 877 | 17  | 
at 16:00. You are asked to implement a compiler for  | 
| 
309
 
640e4a05cd9b
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
298 
diff
changeset
 | 
18  | 
the WHILE language that targets the assembler language  | 
| 823 | 19  | 
provided by Jasmin or Krakatau (both have a very similar  | 
20  | 
syntax). Please submit your answers to the questions  | 
|
21  | 
below as PDF. You can do the implementation in any programming  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
22  | 
language you like, but you need to submit the source code with  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
23  | 
which you answered the questions, otherwise a mark of 0\% will  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
24  | 
be awarded. You should use the lexer and parser from the  | 
| 748 | 25  | 
previous courseworks. Please package \emph{everything}(!) in
 | 
26  | 
a zip-file that creates a directory with the name  | 
|
27  | 
\texttt{YournameYourFamilyname} on my end.
 | 
|
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
28  | 
|
| 751 | 29  | 
\subsection*{Disclaimer\alert}
 | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
30  | 
|
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
31  | 
It should be understood that the work you submit represents  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
32  | 
your own effort. You have not copied from anyone else. An  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
33  | 
exception is the Scala code I showed during the lectures,  | 
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
34  | 
which you can use. You can also use your own code from the  | 
| 886 | 35  | 
CW~1, CW~2 and CW~3. But do not  | 
36  | 
be tempted to ask Github Copilot for help or do any other  | 
|
37  | 
shenanigans like this!  | 
|
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
38  | 
|
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
39  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
40  | 
\subsection*{Jasmin Assembler}
 | 
| 
358
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
41  | 
|
| 
 
b3129cff41e9
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
354 
diff
changeset
 | 
42  | 
The Jasmin assembler is available from  | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
43  | 
|
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
44  | 
\begin{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
45  | 
\url{http://jasmin.sourceforge.net}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
46  | 
\end{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
47  | 
|
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
48  | 
\noindent  | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
49  | 
There is a user guide for Jasmin  | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
50  | 
|
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
51  | 
\begin{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
52  | 
\url{http://jasmin.sourceforge.net/guide.html}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
53  | 
\end{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
54  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
55  | 
\noindent and also a description of some of the instructions  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
56  | 
that the JVM understands  | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
57  | 
|
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
58  | 
\begin{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
59  | 
\url{http://jasmin.sourceforge.net/instructions.html}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
60  | 
\end{center}
 | 
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
61  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
62  | 
\noindent If you generated a correct assembler file for  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
63  | 
Jasmin, for example \texttt{loops.j}, you can use
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
64  | 
|
| 
205
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
65  | 
\begin{center}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
66  | 
\texttt{java -jar jasmin-2.4/jasmin.jar loops.j}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
67  | 
\end{center}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
68  | 
|
| 852 | 69  | 
\noindent in order to translate it into Java Byte Code. If needed, you  | 
70  | 
need to give the path to the Jasmin jar-file. The resulting class  | 
|
71  | 
file can be run with  | 
|
| 
205
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
72  | 
|
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
73  | 
\begin{center}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
74  | 
\texttt{java loops}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
75  | 
\end{center}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
76  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
77  | 
\noindent where you might need to give the correct path to the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
78  | 
class file. For example:  | 
| 
322
 
698ed1c96cd0
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
321 
diff
changeset
 | 
79  | 
|
| 
 
698ed1c96cd0
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
321 
diff
changeset
 | 
80  | 
\begin{center}
 | 
| 
 
698ed1c96cd0
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
321 
diff
changeset
 | 
81  | 
\texttt{java -cp . loops/loops}
 | 
| 
 
698ed1c96cd0
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
321 
diff
changeset
 | 
82  | 
\end{center}
 | 
| 
 
698ed1c96cd0
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
321 
diff
changeset
 | 
83  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
84  | 
\noindent There are also other resources about Jasmin on the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
85  | 
Internet, for example  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
86  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
87  | 
\begin{center}
 | 
| 836 | 88  | 
\small\url{https://saksagan.ceng.metu.edu.tr/courses/ceng444/link/f3jasmintutorial.html}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
89  | 
\end{center}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
90  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
91  | 
\noindent and  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
92  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
93  | 
\begin{center}
 | 
| 905 | 94  | 
  \small\url{http://www.csc.villanova.edu/~tway/courses/csc4181/s2022/labs/finalproject/JVM.pdf}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
95  | 
\end{center}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
96  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
97  | 
\subsection*{Krakatau Assembler}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
98  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
99  | 
The Krakatau assembler is available from  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
100  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
101  | 
\begin{center}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
102  | 
\url{https://github.com/Storyyeller/Krakatau}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
103  | 
\end{center}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
104  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
105  | 
\noindent This assembler requires Python and a package called  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
106  | 
\pcode{ply} available from
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
107  | 
|
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
108  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
109  | 
\url{https://pypi.python.org/pypi/ply}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
110  | 
\end{center}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
111  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
112  | 
\noindent This assembler is largely compatible with the Jasmin  | 
| 473 | 113  | 
syntax---that means for the files we are concerned with here,  | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
114  | 
it understands the same input syntax (no changes to your  | 
| 473 | 115  | 
compiler need to be made; ok maybe some small syntactic  | 
116  | 
adjustments are needed). You can generate Java Byte Code by  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
117  | 
using  | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
118  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
119  | 
\begin{center}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
120  | 
\texttt{python Krakatau-master/assemble.py loops.j}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
121  | 
\end{center}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
122  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
123  | 
\noindent where you may have to adapt the directory where  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
124  | 
Krakatau is installed (I just downloaded the zip file from  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
125  | 
Github and \pcode{Krakatau-master} was the directory where it
 | 
| 473 | 126  | 
was installed). Again the resulting class-file you can run with  | 
127  | 
\texttt{java}.
 | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
128  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
129  | 
|
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
130  | 
%\noindent You need to submit a document containing the answers  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
131  | 
%for the two questions below. You can do the implementation in  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
132  | 
%any programming language you like, but you need to submit the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
133  | 
%source code with which you answered the questions. Otherwise  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
134  | 
%the submission will not be counted. However, the coursework  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
135  | 
%will \emph{only} be judged according to the answers. You can
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
136  | 
%submit your answers in a txt-file or as pdf.\bigskip  | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
137  | 
|
| 899 | 138  | 
\subsection*{Question 0 (Unmarked)}
 | 
139  | 
||
| 900 | 140  | 
Please include in the PDF at the beginning your email address, your student  | 
| 899 | 141  | 
number and whether you are BSc / MSci student and for the latter in which  | 
142  | 
year your are in. Thanks!  | 
|
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
143  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
391 
diff
changeset
 | 
144  | 
\subsection*{Question 1}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
145  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
146  | 
You need to lex and parse WHILE programs, and then generate  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
147  | 
Java Byte Code instructions for the Jasmin assembler (or  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
148  | 
Krakatau assembler). As solution you need to submit the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
149  | 
assembler instructions for the Fibonacci and Factorial  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
150  | 
programs. Both should be so modified that a user can input on  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
151  | 
the console which Fibonacci number and which Factorial should  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
152  | 
be calculated. The Fibonacci program is given in  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
153  | 
Figure~\ref{fibs}. You can write your own program for
 | 
| 473 | 154  | 
calculating factorials. Submit your assembler code as  | 
155  | 
a file that can be run, not as PDF-text.  | 
|
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
156  | 
|
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
157  | 
\begin{figure}[t]
 | 
| 852 | 158  | 
\lstinputlisting[language=while]{../cwtests/cw04/fib.while}
 | 
| 
320
 
0c43ef11e086
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
313 
diff
changeset
 | 
159  | 
\caption{The Fibonacci program in the WHILE language.\label{fibs}}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
160  | 
\end{figure}
 | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
161  | 
|
| 
419
 
4110ab35e5d8
updated courseworks
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
391 
diff
changeset
 | 
162  | 
\subsection*{Question 2}
 | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
163  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
164  | 
Extend the syntax of your language so that it contains also  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
165  | 
\texttt{for}-loops, like
 | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
166  | 
|
| 
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
167  | 
\begin{center}
 | 
| 
391
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
168  | 
\lstset{language=While}
 | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
169  | 
\code{for} \;\textit{Id} \texttt{:=} \textit{AExp}\; \code{upto} 
 | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
170  | 
\;\textit{AExp}\; \code{do} \textit{Block} 
 | 
| 
201
 
c813506e0ee8
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
200 
diff
changeset
 | 
171  | 
\end{center}
 | 
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
172  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
173  | 
\noindent The intended meaning is to first assign the variable  | 
| 
391
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
174  | 
\textit{Id} the value of the first arithmetic expression, test
 | 
| 598 | 175  | 
whether this value is less or equal than the value of the  | 
| 
391
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
176  | 
second arithmetic expression. If yes, go through the loop, and  | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
177  | 
at the end increase the value of the loop variable by 1 and  | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
178  | 
start again with the test. If no, leave the loop. For example  | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
179  | 
the following instance of a \code{for}-loop is supposed to
 | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
180  | 
print out the numbers \pcode{2}, \pcode{3}, \pcode{4}.
 | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
181  | 
|
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
182  | 
|
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
183  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
184  | 
\begin{minipage}{12cm}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
185  | 
\begin{lstlisting}[language=While, numbers=none]
 | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
186  | 
for i := 2 upto 4 do {
 | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
187  | 
write i  | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
188  | 
}  | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
189  | 
\end{lstlisting}
 | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
190  | 
\end{minipage}
 | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
191  | 
\end{center}
 | 
| 
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
192  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
193  | 
\noindent There are two ways how this can be implemented: one  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
194  | 
is to adapt the code generation part of the compiler and  | 
| 
391
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
195  | 
generate specific code for \code{for}-loops; the other is to
 | 
| 
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
196  | 
translate the abstract syntax tree of \code{for}-loops into
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
197  | 
an abstract syntax tree using existing language constructs.  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
198  | 
For example the loop above could be translated to the  | 
| 
391
 
f352cb238c32
updated meaning of for-loop
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
390 
diff
changeset
 | 
199  | 
following \code{while}-loop:
 | 
| 
203
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
200  | 
|
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
201  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
202  | 
\begin{minipage}{12cm}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
203  | 
\begin{lstlisting}[language=While, numbers=none]
 | 
| 
203
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
204  | 
i := 2;  | 
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
205  | 
while (i <= 4) do {
 | 
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
206  | 
write i;  | 
| 905 | 207  | 
i := i + 1  | 
| 
203
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
208  | 
}  | 
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
209  | 
\end{lstlisting}
 | 
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
210  | 
\end{minipage}
 | 
| 
 
f1335c171d50
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
202 
diff
changeset
 | 
211  | 
\end{center}
 | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
212  | 
|
| 630 | 213  | 
\subsection*{Question 3}
 | 
| 
333
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
214  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
215  | 
\noindent In this question you are supposed to give the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
216  | 
assembler instructions for the program  | 
| 
205
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
217  | 
|
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
218  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
219  | 
\begin{minipage}{12cm}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
220  | 
\begin{lstlisting}[language=While, numbers=none]
 | 
| 
333
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
221  | 
for i := 1 upto 10 do {
 | 
| 
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
222  | 
  for i := 1 upto 10 do {
 | 
| 
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
223  | 
write i  | 
| 
205
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
224  | 
}  | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
225  | 
}  | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
226  | 
\end{lstlisting}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
227  | 
\end{minipage}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
228  | 
\end{center}
 | 
| 
 
0b59588d28d2
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
204 
diff
changeset
 | 
229  | 
|
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
230  | 
\noindent  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
231  | 
Note that in this program the variable \pcode{i} is used
 | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
232  | 
twice. You need to make a decision how it should be compiled?  | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
233  | 
Explain your decision and indicate what this program would  | 
| 
333
 
8890852e18b7
updated coursework
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
328 
diff
changeset
 | 
234  | 
print out.  | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
235  | 
|
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
236  | 
\subsection*{Further Information}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
237  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
238  | 
The Java infrastructure unfortunately does not contain an  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
239  | 
assembler out-of-the-box (therefore you need to download the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
240  | 
additional package Jasmin or Krakatau---see above). But it  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
241  | 
does contain a disassembler, called \texttt{javap}. A
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
242  | 
dissembler does the ``opposite'' of an assembler: it generates  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
243  | 
readable assembler code from Java Byte Code. Have a look at  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
244  | 
the following example: Compile using the usual Java compiler  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
245  | 
the simple Hello World program below:  | 
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
246  | 
|
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
247  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
248  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
249  | 
\begin{lstlisting}[language=Java,numbers=none]
 | 
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
250  | 
class HelloWorld {
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
251  | 
    public static void main(String[] args) {
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
252  | 
        System.out.println("Hello World!");
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
253  | 
}  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
254  | 
}  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
255  | 
\end{lstlisting}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
256  | 
\end{minipage}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
257  | 
\end{center}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
258  | 
|
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
259  | 
\noindent  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
260  | 
You can use the command  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
261  | 
|
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
262  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
263  | 
\begin{minipage}{12cm}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
264  | 
\begin{lstlisting}[language={},numbers=none]
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
265  | 
javap -v HelloWorld  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
266  | 
\end{lstlisting}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
267  | 
\end{minipage}
 | 
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
268  | 
\end{center}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
269  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
270  | 
\noindent to see the assembler instructions of the Java Byte  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
271  | 
Code that has been generated for this program. You can compare  | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
272  | 
this with the code generated for the Scala version of Hello  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
273  | 
World.  | 
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
274  | 
|
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
275  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
276  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
277  | 
\begin{lstlisting}[language=Scala,numbers=none]
 | 
| 
204
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
278  | 
object HelloWorld {
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
279  | 
   def main(args: Array[String]) {
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
280  | 
      println("Hello World!")
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
281  | 
}  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
282  | 
}  | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
283  | 
\end{lstlisting}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
284  | 
\end{minipage}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
285  | 
\end{center}
 | 
| 
 
fec99c437965
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
203 
diff
changeset
 | 
286  | 
|
| 
222
 
b712519b41d3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
216 
diff
changeset
 | 
287  | 
|
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
288  | 
\subsection*{Library Functions}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
289  | 
|
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
290  | 
You need to generate code for the commands \texttt{write} and
 | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
291  | 
\texttt{read}. This will require the addition of some
 | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
292  | 
``library'' functions to your generated code. The first  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
293  | 
command even needs two versions, because you need to write out  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
294  | 
an integer and string. The Java byte code will need two  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
295  | 
separate functions for this. For writing out an integer, you  | 
| 
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
296  | 
can use the assembler code  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
297  | 
|
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
298  | 
\begin{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
299  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
300  | 
\begin{lstlisting}[language=JVMIS, numbers=none]
 | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
301  | 
.method public static write(I)V  | 
| 859 | 302  | 
.limit locals 1  | 
303  | 
.limit stack 2  | 
|
304  | 
getstatic java/lang/System/out Ljava/io/PrintStream;  | 
|
305  | 
iload 0  | 
|
306  | 
invokevirtual java/io/PrintStream/println(I)V  | 
|
307  | 
return  | 
|
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
308  | 
.end method  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
309  | 
\end{lstlisting}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
310  | 
\end{minipage}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
311  | 
\end{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
312  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
313  | 
\noindent This function will invoke Java's \texttt{println}
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
314  | 
function for integers. Then if you need to generate code for  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
315  | 
\texttt{write x} where \texttt{x} is an integer variable, you
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
316  | 
can generate  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
317  | 
|
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
318  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
319  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
320  | 
\begin{lstlisting}[language=JVMIS, numbers=none]
 | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
321  | 
iload n  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
322  | 
invokestatic XXX/XXX/write(I)V  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
323  | 
\end{lstlisting}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
324  | 
\end{minipage}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
325  | 
\end{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
326  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
327  | 
\noindent where \texttt{n} is the index where the value of the
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
328  | 
variable \texttt{x} is stored. The \texttt{XXX/XXX} needs to
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
329  | 
be replaced with the class name which you use to generate the  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
330  | 
code (for example \texttt{fib/fib} in case of the Fibonacci
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
331  | 
numbers).  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
332  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
333  | 
Writing out a string is similar. The corresponding library  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
334  | 
function uses strings instead of integers:  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
335  | 
|
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
336  | 
\begin{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
337  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
338  | 
\begin{lstlisting}[language=JVMIS, numbers=none]
 | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
339  | 
.method public static writes(Ljava/lang/String;)V  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
340  | 
.limit stack 2  | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
341  | 
.limit locals 1  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
342  | 
getstatic java/lang/System/out Ljava/io/PrintStream;  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
343  | 
aload 0  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
344  | 
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
345  | 
return  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
346  | 
.end method  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
347  | 
\end{lstlisting}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
348  | 
\end{minipage}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
349  | 
\end{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
350  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
351  | 
\noindent The code that needs to be generated for \code{write
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
352  | 
"some_string"} commands is  | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
353  | 
|
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
354  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
355  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
356  | 
\begin{lstlisting}[language=JVMIS,numbers=none]
 | 
| 
210
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
357  | 
ldc "some_string"  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
358  | 
invokestatic XXX/XXX/writes(Ljava/lang/String;)V  | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
359  | 
\end{lstlisting}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
360  | 
\end{minipage}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
361  | 
\end{center}
 | 
| 
 
33175abd5474
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
205 
diff
changeset
 | 
362  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
363  | 
\noindent Again you need to adjust the \texttt{XXX/XXX} part
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
364  | 
in each call.  | 
| 
202
 
180cbfc1520a
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
201 
diff
changeset
 | 
365  | 
|
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
366  | 
The code for \texttt{read} is more complicated. The reason is
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
367  | 
that inputting a string will need to be transformed into an  | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
368  | 
integer. The code in Figure~\ref{read} does this. It can be
 | 
| 
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
369  | 
called with  | 
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
370  | 
|
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
371  | 
\begin{center}
 | 
| 
390
 
a1fe591a3df3
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
373 
diff
changeset
 | 
372  | 
\begin{minipage}{12cm}
 | 
| 
313
 
90ccc385c547
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
309 
diff
changeset
 | 
373  | 
\begin{lstlisting}[language=JVMIS,numbers=none]
 | 
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
374  | 
invokestatic XXX/XXX/read()I  | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
375  | 
istore n  | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
376  | 
\end{lstlisting}
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
377  | 
\end{minipage}
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
378  | 
\end{center}
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
379  | 
|
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
380  | 
\noindent  | 
| 
321
 
c5850f8f3f5e
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
320 
diff
changeset
 | 
381  | 
where \texttt{n} is the index of the variable that requires an input. If you
 | 
| 
 
c5850f8f3f5e
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
320 
diff
changeset
 | 
382  | 
use Windows you need to take into account that a ``return'' is not just a newline,  | 
| 
 
c5850f8f3f5e
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
320 
diff
changeset
 | 
383  | 
\code{'\\10'}, but \code{'\\13\\10'}. This means you need to change line~12 in 
 | 
| 
 
c5850f8f3f5e
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
320 
diff
changeset
 | 
384  | 
Figure~\ref{read} to \pcode{ldc 13}.  
 | 
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
385  | 
|
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
386  | 
|
| 
321
 
c5850f8f3f5e
updated
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
320 
diff
changeset
 | 
387  | 
\begin{figure}[t]\small
 | 
| 540 | 388  | 
\begin{lstlisting}[language=JVMIS,numbers=left]
 | 
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
389  | 
.method public static read()I  | 
| 859 | 390  | 
.limit locals 10  | 
391  | 
.limit stack 10  | 
|
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
392  | 
|
| 859 | 393  | 
ldc 0  | 
394  | 
istore 1 ; this will hold our final integer  | 
|
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
395  | 
Label1:  | 
| 859 | 396  | 
getstatic java/lang/System/in Ljava/io/InputStream;  | 
397  | 
invokevirtual java/io/InputStream/read()I  | 
|
398  | 
istore 2  | 
|
399  | 
iload 2  | 
|
400  | 
ldc 10 ; the newline delimiter for Unix (Windows 13)  | 
|
401  | 
isub  | 
|
402  | 
ifeq Label2  | 
|
403  | 
iload 2  | 
|
404  | 
ldc 32 ; the space delimiter  | 
|
405  | 
isub  | 
|
406  | 
ifeq Label2  | 
|
407  | 
iload 2  | 
|
408  | 
ldc 48 ; we have our digit in ASCII, have to subtract it from 48  | 
|
409  | 
isub  | 
|
410  | 
ldc 10  | 
|
411  | 
iload 1  | 
|
412  | 
imul  | 
|
413  | 
iadd  | 
|
414  | 
istore 1  | 
|
415  | 
goto Label1  | 
|
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
416  | 
Label2:  | 
| 859 | 417  | 
; when we come here we have our integer computed  | 
418  | 
; in local variable 1  | 
|
419  | 
iload 1  | 
|
420  | 
ireturn  | 
|
| 
214
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
421  | 
.end method  | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
422  | 
\end{lstlisting}\normalsize
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
423  | 
\caption{Assembler code for reading an integer from the console.\label{read}}
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
424  | 
\end{figure}
 | 
| 
 
5be68de225e9
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents: 
213 
diff
changeset
 | 
425  | 
|
| 
200
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
426  | 
\end{document}
 | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
427  | 
|
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
428  | 
%%% Local Variables:  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
429  | 
%%% mode: latex  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
430  | 
%%% TeX-master: t  | 
| 
 
7415871b1ef5
added
 
Christian Urban <christian dot urban at kcl dot ac dot uk> 
parents:  
diff
changeset
 | 
431  | 
%%% End:  |