\title{Opgaver til Microprocessors 2}
\date{2021-03-24}

Har fundet ud af at jeg har lavet de forkerte opgaver \texttt{:-(}.

\section{Problem 4.1}

\begin{opg}
    What are the four steps CPUs use to execute instructions
\end{opg}

\paragraph{Fetch} comes first, where the instruction is fetched from memory.
This is taken from where the instruction pointer is pointing.

\paragraph{Decode} instruction, where it most likely requires multiple microcode instructions.

Whether to \textbf{Access memory} is determined in the decoding step.
If this is required, this memory must be fetched from memory.

\paragraph{Execute} the instruction using the fetched memory and register values.

\paragraph{Repeat} from the beginning with a new fetch.

\section{Problem 4.2}

\emph{In Fig. 4-6, the B bus register is encoded in a 4-bit field, but the C bus is represented
as a bit map. Why?}

It is often wanted to save the result from the ALU in multiple destination registers.
Therefore one cannot take the shortcut with a 4-bit field, as that would only allow one save at the time.

One cannot present 1 and 2 at the same time in 4-bit field, as that would activate register 3.

\section{Problem 4.4}

{\itshape
    Suppose that in the example of Fig. 4-14(a) the statement
\begin{verbatim}
    k = 5;
\end{verbatim}
    is added after the if statement. What would the new assembly code be? Assume that
    the compiler is an optimizing compiler.
}

Well k is set either way, so one can invert the if.

\begin{verbatim}
    ILOAD j
    ILOAD k
    IADD
    BIPUSH 3
    IF_ICMPEQ L1
    ILOAD j
    BIPUSH 1
    ISUB
    ISTORE j
    L1: BIPUSH 5
    ISTORE k
\end{verbatim}

\section{Problem 4.4 Moodle}

\begin{opg}
    Give two different IJVM translations for the following IJVM code:
\begin{verbatim}
    i = j + m + 8;
\end{verbatim}
\end{opg}

Dette kan man gøre ved at load $j$ og $m$ fra stacken og add dem.
Derefter kan push 8 og add den.
Herefter gemmer man i $i$.

\begin{verbatim}
    ILOAD j
    ILOAD m
    IADD
    BIPUSH 8
    IADD
    ISTORE i
\end{verbatim}

En anden måde er at push alle ting først også add flere gange efter hinnanden.

\begin{verbatim}
    ILOAD j
    ILOAD m
    BIPUSH 8
    IADD
    IADD
    ISTORE i
\end{verbatim}

\section{Problem 4.9}

{\itshape
    How long does a 2.5-GHz Mic-1 take to execute the Java statement
\begin{verbatim}
    i = j + k;
\end{verbatim}
    Give your answer in nanoseconds
}

First we "compile" the java statement :-).

\begin{verbatim}
    ILOAD j
    ILOAD k
    IADD
    ISTORE i
\end{verbatim}

Then we can add how many microinstructions each takes (\textbf{bold} number) multiplied with how many times it is used.

\[
\underbrace{\mathbf 1 \cdot 4}_{\mathrm{MAIN}} + \underbrace{\mathbf 5 \cdot 2}_{\mathrm{ILOAD}} + \underbrace{\mathbf 3}_{\mathrm{IADD}} + \underbrace{\mathbf 6}_{\mathrm{ISTORE}} = 23
\]

Then we can multiply with the nanoseconds a single instruction takes
\[
    \frac 1 {\SI{2.5e9}{Hz}} \cdot 23 = \SI{9.2e-9}{s}\,,
\]
which is 9.2 Nanoseconds.
