\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.