uni/rs/RS_G1_B12_Martens_Kornblum.tex

154 lines
6.1 KiB
TeX

\documentclass[10pt,a4paper,oneside,ngerman,numbers=noenddot]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{paralist}
\usepackage{qtree}
\usepackage[locale=DE,exponent-product=\cdot ,detect-all]{siunitx}
\usepackage{tikz}
\usepackage[scaled=0.78]{luximono}
\usepackage{listings}
\usepackage{subfigure}
\usetikzlibrary{automata,matrix,fadings,calc,positioning,decorations.pathreplacing,decorations.text,arrows}
\pagenumbering{arabic}
\def\thesection{12.\arabic{section})}
\def\thesubsection{(\alph{subsection})}
\def\thesubsubsection{(\arabic{subsubsection})}
\renewcommand{\labelenumi}{(\roman{enumi})}
\hyphenation{Nach-komma-stel-len}
\lstnewenvironment{java}[1][]{%
\lstset{basicstyle=\ttfamily ,backgroundcolor=\color[gray]{.95},columns=flexible,fontadjust=true,language=Java,tabsize=4,numbers=none,#1}%
}{%
}
\graphicspath{{D:/Users/Jim-Studium/Pictures/Studium/RS/}}
\tikzstyle{huffmanNodes}=[matrix of nodes,
nodes={circle,thin,draw=black!20,minimum size=10mm,text height=1.5ex,text depth=.25ex,inner sep=-10pt}]
\tikzstyle{huffmanBase}=[matrix of nodes,
nodes={minimum size=10mm,text height=1.5ex,text depth=.25ex,inner sep=-10pt}]
\begin{document}
\author{Jim Martens (Matrikelnummer 6420323) \and Marlo Kornblum (Matrikelnummer 6427301)}
\title{Rechnerstrukturen Aufgabenblatt 12}
\maketitle
\section{} %12.1
\subsection{} %a
Ziel: $0x100$ \\
Resultat in Ziel: $0x0000CB03$
\subsection{} %b
Ziel: $0x104$ \\
Resultat in Ziel: $0x000000BF$
\subsection{} %c
Ziel: $0x108$ \\
Resultat in Ziel: $0x00246000$
\subsection{} %d
Ziel: $0x10C$ \\
Resultat in Ziel: $0x00000043$
\subsection{} %e
Ziel: $\%ecx$ \\
Resultat in Ziel: $0x0000000B$
\subsection{} %f
Ziel: $\%eax$ \\
Resultat in Ziel: $0x000000FC$
\section{} %12.2
xorl $<Rb>, <Rb>$
\section{} %12.3
movl: $\%eip, \%eax$
\section{} %12.4
pushl $\%ebp$\\
movl $\%esp, \%ebp$ \\
movl $8(\%ebp), \%eax$ \\
subl $\$32, \%eax$ \\
imull $\$142, \%eax$ \\
movl $\%ebp, \%esp$ \\
popl $\%ebp$ \\
ret
\section{} %12.5
\subsection{} %a
Der Reihenfolge nach speichert das Assemblerprogramm zunächst das Register $\%ebx$ auf den Stack. Anschließend wird vom Register $\%esp$ die dezimale Konstante $24$ abgezogen und der neue Wert in $\%esp$ gespeichert. Nun wird der Inhalt, der ausgehend vom Wert von $\%esp$ plus einem Offset von $32$ im Stack steht, in das Register $\%ebx$ geschrieben. Im nächsten Schritt wird der Inhalt, der ausgehend vom Wert von $\%esp$ plus einem Offset von $36$ im Stack liegt, in das Register $\%edx$ kopiert.
In das Register $\%eax$ wird schließlich die Konstante $1$ gespeichert. Nun wird das Register $\%edx$ mit sich selbst verglichen. Dabei werden nur die Flags gesetzt, das Ergebnis selber wird jedoch verworfen. Das hier interessante (wegen dem nachfolgenden Jumpbefehl) Zero Flag wird gesetzt, wenn $\%edx$ gleich $0$ ist, ansonsten wird es nicht gesetzt.
In der darauffolgenden Zeile folgt ein Jumpbefehl, der nur ausgeführt wird, wenn das Zero Flag gesetzt ist. Falls dem so ist, wird zu L2 gesprungen.
Dort wird zum Inhalt des Registers $\%esp$ die dezimale Konstante $24$ hinzugezählt. Anschließend wird das oberste Element des Stacks in das Register $\%ebx$ gespeichert und der aktuelle Aufruf beendet.
Wenn nicht gesprungen wird, dann wird dieses hier ausgeführt:
Nun wird $1$ vom Inhalt von $\%edx$ subtrahiert. Anschließend wird der Inhalt von $\%edx$ an die Stelle geschrieben, die in $\%esp$ plus dem Offset von $4$ referenziert ist. Dann wird der Inhalt von $\%ebx$ an die Stelle geschrieben, die in $\%esp$ referenziert ist.
Jetzt ruft sich myst rekursiv erneut auf. Sobald bei einem Aufruf von myst das Register $\%edx$ gleich $0$ ist, wird der Aufruf beendet und abschließend in $\%eax$ das Produkt der Werte von $\%eax$ und $\%ebx$ geschrieben.
Damit wird das Unterprogramm beendet.
\subsection{} %b
Das Unterprogramm berechnet $5^{2}=25$. Allgemeiner wird $a^{b}$ berechnet.
\subsection{} %c
\begin{tikzpicture}
\draw (0, 0) -- +(2, 0);
\draw (0, 0.5) -- +(2, 0);
\draw (0, 1) -- +(2, 0);
\draw (0, 1.5) -- +(2, 0);
\draw (0, 2) -- +(2, 0);
\draw (0, 2.5) -- +(2, 0);
\draw (0, 3) -- +(2, 0);
\draw (0, 3.5) -- +(2, 0);
\draw (0, 4) -- +(2, 0);
\draw (0, 4.5) -- +(2, 0);
\draw (0, 5) -- +(2, 0);
\draw (0, 5.5) -- +(2, 0);
\draw (0, 6) -- +(2, 0);
\draw (0, 6.5) -- +(2, 0);
\draw (0, 7) -- +(2, 0);
\draw (0, 7.5) -- +(2, 0);
\draw (0, 8) -- +(2, 0);
\draw (0, 8.5) -- +(2, 0);
\draw (0, 9) -- +(2, 0);
\draw (0, 9.5) -- +(2, 0);
\draw (0, 10) -- +(2, 0);
\draw (0, 10.5) -- +(2, 0);
\draw (0, 11) -- +(2, 0);
\draw (0, 11.5) -- +(2, 0);
\draw (0, 12) -- +(2, 0);
\draw (0, 12.5) -- +(2, 0);
\draw (0, 13) -- +(2, 0);
%\draw (0, 13.5) -- +(2, 0);
\draw (0,0) -- +(0, 13.5);
\draw (2,0) -- +(0, 13.5);
\node (other) at (1, 13.25) {...};
\node (b1) at (1, 12.75) {b = 2};
\node (a1) at (1, 12.25) {a = 5};
\node (main) at (1, 11.75) {$\%eip$ main()};
\node (ebx1) at (1, 11.25) {$\%ebx \rightarrow ?$};
\node (other2) at (1, 10.75) {...};
\node (other3) at (1, 10.25) {...};
\node (other4) at (1, 9.75) {...};
\node (other5) at (1, 9.25) {...};
\node (b2) at (1, 8.75) {b = 1};
\node (a2) at (1, 8.25) {a = 5};
\node (myst1) at (1, 7.75) {$\%eip$ myst()};
\node (ebx2) at (1, 7.25) {$\%ebx \rightarrow 5$};
\node (other6) at (1, 6.75) {...};
\node (other7) at (1, 6.25) {...};
\node (other8) at (1, 5.75) {...};
\node (other9) at (1, 5.25) {...};
\node (b3) at (1, 4.75) {b = 0};
\node (a3) at (1, 4.25) {a = 5};
\node (myst2) at (1, 3.75) {$\%eip$ myst()};
\node (ebx3) at (1, 3.25) {$\%ebx \rightarrow 5$};
\node (other10) at (1, 2.75) {...};
\node (other11) at (1, 2.25) {...};
\node (other12) at (1, 1.75) {...};
\node (other13) at (1, 1.25) {...};
\node (other14) at (1, 0.75) {...};
\node (other15) at (1, 0.25) {...};
\node (esp) at (-0.75, 0.25) {$\%esp \rightarrow$};
\end{tikzpicture}
\subsection{} %d
Es würde eine Endlosschleife entstehen, da der zweite Parameter nie $0$ wird und damit nie die Sprungmarke L2 erreicht wird, wodurch nie ein Aufruf beendet würde und unendlich viele Rekursionsschritte durchgeführt würden.
\end{document}