\documentclass[10pt,a4paper]{article}

\usepackage{ngerman}
\usepackage{amstext}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{stmaryrd}
\usepackage{enumerate}
\usepackage{thumbpdf}
\usepackage{graphicx}
\usepackage{float}
\usepackage[T1]{fontenc}
\usepackage{ae}
\usepackage[latin1]{inputenc}

\DeclareMathOperator{\CSA}{CSA}
\DeclareMathOperator{\FA}{FA}
\DeclareMathOperator{\FF}{FF}
\DeclareMathOperator{\MUX}{MUX}
\DeclareMathOperator{\Enc}{Enc}
\DeclareMathOperator{\Dec}{Dec}
\DeclareMathOperator{\FDec}{FDec}
\DeclareMathOperator{\BCD}{BCD}
\DeclareMathOperator{\BA}{BA}
\DeclareMathOperator{\PP}{PP}
\DeclareMathOperator{\alu}{alu}
\DeclareMathOperator{\testi}{testi}
\DeclareMathOperator{\shifta}{shifta}
\DeclareMathOperator{\IR}{IR}
\DeclareMathOperator{\CLA}{CLA}


\floatstyle{ruled}
\newfloat{schematic}{htbp}{los}
\floatname{schematic}{Schaltkreis}

\begin{document}

\newcommand{\AND}{\ensuremath{\wedge}}
\newcommand{\OR}{\ensuremath{\vee}}
\newcommand{\SetR}{\ensuremath{\mathbb{R}}}
\newcommand{\SetN}{\ensuremath{\mathbb{N}}}
\newcommand{\SetZ}{\ensuremath{\mathbb{Z}}}
\newcommand{\SetQ}{\ensuremath{\mathbb{Q}}}
\newcommand{\QED}{\ensuremath{\hspace*{\fill}\square}}

\thispagestyle{empty}

\title{Rechnerarchitektur - Übungsblatt 9 \\
	Übungsgruppe 8 - Di, 15-17 Uhr \\
	Steffen Heil}
\author{Jan Hendrik Dithmar (Matrikelnummer 2031259) \\
	Carsten Saar (Matrikelnummer 2030107) \\
	Thomas Ospelt (Matrikelnummer 2029959) \\
	Timo Adam (Matrikelnummer 2031946)}
\date{}

\maketitle

\newpage

\section*{Aufgabe 1}
Die Aufgabe war nicht ganz schlüssig gestellt. Es fehlte die Angabe, ob Worte, Halbworte oder Bytes bearbeitet bzw.
untersucht werden sollen. Aufgrund der Tatsache, dass die letzte Adresse 32767 weder Wort- noch Halbwort-aligned ist
(und somit weder ein Wort- noch Halbwort-Zugriff auf diese Adresse möglich ist), habe ich vorausgesetzt, dass Bytes
betrachtet werden sollen. Für das Resultat des Programms aus Aufgabenteil (b) habe ich einen Wort-Zugriff angenommen,
da dann das Resultat direkt vor dem untersuchten Speicherbereich steht.
\begin{enumerate}[(a)]
\item In Speicherzellen 1024 bis 32767 (Byte) jeweils die Adresse modulo $2^8$ hineinschreiben. \\[0.5cm]
\begin{tabular}{ll}
  \texttt{R1 = R0 + 1024} & // lade Register \texttt{R1} mit Konstante 1024 \\
  & // Laufvariable für die zu bearbeitende Adresse \\
  \texttt{R2 = (R1 > 32767 ? 1 : 0)} & // \texttt{WHILE}: Schleife abbrechen, wenn \\
  & // Adresse hinter zu bearbeitendem Bereich liegt \\
  \texttt{PC = PC + (R2 $\neq$ 0 ? 16 : 4)} & // wenn ja, springe aus Schleife nach \texttt{DONE} \\
  \texttt{M$_1$(R1 + 0) = R1} & // untere 8 Bit der Adresse (Adresse modulo $2^8$) schreiben \\
  & // obere 24 Bit werde einfach abgeschnitten \\
  \texttt{R1 = R1 + 1} & // Laufvariable mit Adresse um 1 erhöhen \\
  \texttt{PC = PC - 16} & // unbedingter Sprung nach \texttt{WHILE} \\
  & // \texttt{DONE}: Programm beendet \\
\end{tabular}
\item Prüfen, ob in den Speicherzellen 1024 bis 32767 (Byte) jeweils die Adresse modulo $2^8$ steht.
      Wenn ja, in Speicherzelle 1020 (Wort) den Wert 1 ablegen, ansonsten den Wert 0. \\[0.5cm]
\begin{tabular}{ll}
  \texttt{M$_4$(R0 + 1020) = R0} & // initialisiere Ergebnis mit 0 \\
  & // Annahme ,,gescheitert``, bis alle Speicherzellen geprüft \\
  \texttt{R1 = R0 + 1024} & // lade Register \texttt{R1} mit Konstante 1024 \\
  & // Laufvariable für die zu prüfende Adresse \\
  \texttt{R2 = M$_1$(R1 + 0)} & // \texttt{LOOP}: Speicherzelle an Adresse \texttt{R1} nach \texttt{R2} laden \\
  & // Achtung: \texttt{R2} enthält den Wert mit sign extension \\
  \texttt{R2 = R2 $\wedge$ 255} & // obere 24 Bits ausmaskieren (sign extension aufheben) \\
  \texttt{R3 = R1 $\wedge$ 255} & // Adresse modulo $2^8$ in \texttt{R3}, Soll-Wert \\
  \texttt{R2 = (R2 = R3 ? 1 : 0)} & // vergleiche Ist- mit Soll-Wert \\
  \texttt{PC = PC + (R2 = 0 ? 24 : 4)} & // wenn ungleich, Schleife abbrechen (springe zu \texttt{DONE}) \\
  & // in diesem Fall bleibt Ergebnis 0 (siehe oben) unverändert \\
  \texttt{R1 = R1 + 1} & // Laufvariable mit Adresse um 1 erhöhen \\
  \texttt{R2 = (R1 > 32767 ? 1 : 0)} & // liegt nächste Adresse hinter zu prüfendem Bereich? \\
  \texttt{PC = PC + (R2 = 0 ? -28 : 4)} & // wenn nein, zu Beginn der Schleife (\texttt{LOOP}) springen \\
  \texttt{R1 = R0 + 1} & // Wert 1 in \texttt{R1} laden \\
  \texttt{M$_4$(R0 + 1020) = R1} & // Ergebnis 1 in die geforderte Speicherzelle schreiben \\
  & // \texttt{DONE}: Programm beendet, \\
  & // Ergebnis in Speicherzelle 1020 (Wort) \\  
\end{tabular}
\end{enumerate}

\section*{Aufgabe 2}
\begin{enumerate}[(a)]
  \item siehe Anhang
  \item Sei $z = \langle z_1 \; z_0 \rangle$ der alte Zustand, $z_0, z_1, \text{up} \in \{0,1\}$.
        Der neue Zustand $z'$ ergibt sich wie folgt
        $$ z' = \langle z_1' \; z_0' \rangle \quad \text{mit} \quad z_1'=z_0 \varoplus z_1 \varoplus (\sim \text{up}) \quad \text{und} \quad z_0'=\sim z_0 $$
  \item Sei $z = \langle z_1 \; z_0 \rangle$ der aktuelle Zustand des Automaten, $z_0, z_1, \text{output} \in \{0,1\}$.
        Das Ausgangssignal $\langle x \rangle$ ergibt sich wie folgt
        $$ \langle x \rangle = \langle (z_1 \wedge \text{output}), (z_0 \wedge \text{output}) \rangle $$
\end{enumerate}

\end{document}