\documentclass{bschlangaul-aufgabe}
\bLadePakete{java,spalten,struktogramm}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Abitur 2015 IV},
  Thematik = {Papyrus Rhind},
  Referenz = TECH.Ein-Adress.04-Abitur-2015-IV-Papyrus-Rhind,
  RelativerPfad = Module/50_TECH/10_Ein-Adress/Aufgabe_04-Abitur-2015-IV-Papyrus-Rhind.tex,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Ein-Adress-Befehl-Assembler},
}

% Eingeschickt 3.2.2021
% zurückbekommen und korrigiert 5.2.2021

%%
%
%%

Auf dem ägyptischen \emph{Papyrus Rhind}, der etwa auf das Jahr 1550 v.
Chr. datiert wird, ist eine Möglichkeit zur Multiplikation zweier
natürlicher Zahlen $z_1$ und $z_2$ beschrieben. Als Struktogramm
lässt sich dieser Algorithmus folgendermaßen darstellen:
\index{Ein-Adress-Befehl-Assembler}

\begin{center}
\begin{struktogramm}(90,50)
\assign{lies $z_1$}
\assign{lies $z_2$}
\assign{$erg = 0$}

\while{wiederhole solange $z_1 > 0$}
\ifthenelse{4}{4}
{$z_1$ gerade}{wahr}{falsch}
\change
\assign{$erg = erg + z_2$}
\ifend
\assign{$z_1 = z_1 / 2$ (ganzzahlige Division durch 2)}
\assign{$z_2 = z_2 \cdot 2$ }
\whileend
\end{struktogramm}
\end{center}

\noindent
Das berechnete Produkt steht nach Abarbeitung des Algorithmus in der
Variablen $erg$.

\begin{enumerate}

%%
% a)
%%

\item Berechnen Sie mithilfe der beschriebenen ägyptischen
Multiplikation schrittweise das Produkt aus $z_1 = 13$ und $z_2 = 5$.

\begin{bAntwort}
\begin{tabular}{rrr}
$z_1$ & $z_2$ & $erg$ \\\hline
13 & 5  & 5   \\
6  & 10 & -   \\
3  & 20 & 25  \\
1  & 40 & 65  \\
0  & 80 & -  \\\hline
   &    & 65  \\
\end{tabular}
\end{bAntwort}

%%
% b)
%%

\item Nennen Sie die wesentliche Idee des Speichermodells eines
Rechners, der nach dem von-Neumann-Prinzip aufgebaut ist. Geben Sie
einen Vor- und einen Nachteil dieses Speichermodells an.

\begin{bAntwort}
Die 7 Grundprinzipien der \emph{Von-Neumann-Architektur}:

\begin{enumerate}
\item Der Rechner besteht aus 4 Werken.

\item Der Rechner ist programmgesteuert.

\item Die Programme und Daten liegen im selben Speicher.

\item Der Hauptspeicher ist in Zellen gleicher Größe aufgeteilt.

\item Die Programme bestehen aus Folgen von Befehlen (Sequentielle
Ausführung)

\item Der Programmablauf ist durch Sprünge möglich.

\item Die Daten und Programme werden in Binärdarstellung gespeichert und
verarbeitet.
\end{enumerate}

\bigskip

\begin{description}
\item[Vorteil:]

Da in von-Neumann-Rechnern keine redundanten Komponenten verbaut werden,
bleibt der Hardwareaufwand gering.

\item[Nachteil:]

Der wichtigste Nachteil ist der sogenannte Von-Neumann-Flaschenhals. Er
existiert, da das Bussystem alle Befehle und Daten streng sequentiell
transportiert.
\end{description}
\end{bAntwort}

%%
% c)
%%

\item Bestätigen Sie anhand zweier Beispiele, dass mithilfe des
folgenden Programmausschnitts entschieden werden kann, ob
Speicherzelle 101 eine gerade oder ungerade Zahl enthält.

\begin{minted}{asm}
LOAD 101
SHRI 1
SHLI 1
SUB 101
\end{minted}

\begin{tabular}{lll}
                           & gerade Zahl & ungerade Zahl \\\hline
\bAssemblerCode{LOAD 101} & 8 (0b1000)  & 9 (0b1001)    \\
\bAssemblerCode{SHRI 1}   & 4 (0b0100)  & 4 (0b0100)    \\
\bAssemblerCode{SHLI 1}   & 8 (0b1000)  & 8 (0b1000)    \\
\bAssemblerCode{SUB 101}  & 0           & -1            \\
\end{tabular}

\item Schreiben Sie ein Programm für die angegebene Registermaschine,
das den Algorithmus des \emph{Papyrus Rhind} umsetzt. Gehen Sie dabei
davon aus, dass die beiden positiven ganzzahligen Faktoren $z_1$ und
$z_2$ bereits in den Speicherzellen $101$ und $102$ stehen und dass alle
weiteren nicht vom Programm belegten Speicherzellen mit dem Wert $0$
vorbelegt sind.

\begin{bAntwort}
\bPseudoUeberschrift{Assembler}

\bAssemblerDatei{Aufgabe_04-Abitur-2015-IV-Papyrus-Rhind.mia}

\bPseudoUeberschrift{Minisprache}

\bMinispracheDatei{Aufgabe_04-Abitur-2015-IV-Papyrus-Rhind.mis}

\bPseudoUeberschrift{Java (iterativ)}

\bJavaDatei[firstline=6,lastline=16]{aufgaben/tech_info/assembler/ein_adress/AegyptischeMultiplikation}

\bPseudoUeberschrift{Java (rekursiv)}

\bJavaDatei[firstline=18,lastline=31]{aufgaben/tech_info/assembler/ein_adress/AegyptischeMultiplikation}
\end{bAntwort}

\end{enumerate}

\end{document}
