mirror of https://github.com/2martens/uni.git
203 lines
6.8 KiB
TeX
203 lines
6.8 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{11.\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 11}
|
|
\maketitle
|
|
|
|
\section{} %11.1
|
|
\subsection{} %a
|
|
30
|
|
\subsection{} %b
|
|
40
|
|
\subsection{} %c
|
|
50
|
|
\subsection{} %d
|
|
30
|
|
\subsection{} %e
|
|
40
|
|
\section{} %11.2
|
|
\begin{figure}[h]
|
|
7 Befehle mit einer 5-bit Registernummer und einer 24-bit Adresse:\\
|
|
\begin{tikzpicture}
|
|
\draw (0,0) -- +(12,0); %untere Kante
|
|
\draw (0,0) -- +(0,0.5); %linke Kante
|
|
\draw (0,0.5) -- +(12,0); %obere Kante
|
|
\draw (12,0) -- +(0,0.5); %rechte Kante
|
|
\draw (1.5,0) -- +(0,0.5); %rechte Kante von Opcode
|
|
\draw (4.0,0) -- +(0,0.5); %rechte Kante der Reg-nr.
|
|
\node at ++(0.7, 0.2) (opcode) {Opcode}; %Opcode
|
|
\node at ++(2.2, 0.2) (regNr) {Reg-Nr.}; %Reg-Nr.
|
|
\node at ++(6.2, 0.2) (address) {Adresse}; %Adresse
|
|
\node at ++(0.2,-0.4) (31) {$31$};
|
|
\node at ++(1.3,-0.4) (29) {$29$};
|
|
\node at ++(1.7,-0.4) (28) {$28$};
|
|
\node at ++(4.8,-0.4) (24) {$24$};
|
|
\node at ++(5.2,-0.4) (23) {$23$};
|
|
\node at ++(11.8,-0.4) (0) {$0$};
|
|
\end{tikzpicture}
|
|
\end{figure}
|
|
|
|
\begin{figure}[h]
|
|
100 Befehle mit zwei 5-bit Registernummern und einem Adressoffset:\\
|
|
\begin{tikzpicture}
|
|
\draw (0,0) -- +(12,0); %untere Kante
|
|
\draw (0,0) -- +(0,0.5); %linke Kante
|
|
\draw (0,0.5) -- +(12,0); %obere Kante
|
|
\draw (12,0) -- +(0,0.5); %rechte Kante
|
|
\draw (1.5,0) -- +(0,0.5); %rechte Kante von Opcode1
|
|
\draw (5.0,0) -- +(0,0.5); %rechte Kante von Opcode2
|
|
\draw (7.5,0) -- +(0,0.5); %rechte Kante von Reg-Nr.
|
|
\draw (10.0,0) -- +(0,0.5); %rechte Kante von Reg-Nr. 2
|
|
\node at ++(0.7,0.2) (opcode1) {$111$}; %Opcode1
|
|
\node at ++(2.2,0.2) (opcode2) {Opcode}; %Opcode2
|
|
\node at ++(5.7,0.2) (regNr) {Reg-Nr.}; %Reg-Nr.
|
|
\node at ++(8.4,0.2) (regNr2) {Reg-Nr. 2}; %Reg-Nr. 2
|
|
\node at ++(10.7,0.2) (offset) {Offset}; %Adressoffset
|
|
\node at ++(0.2,-0.4) (31) {$31$};
|
|
\node at ++(1.3,-0.4) (29) {$29$};
|
|
\node at ++(1.7,-0.4) (28) {$28$};
|
|
\node at ++(4.8,-0.4) (22) {$22$};
|
|
\node at ++(5.2,-0.4) (21) {$21$};
|
|
\node at ++(7.3,-0.4) (17) {$17$};
|
|
\node at ++(7.7,-0.4) (16) {$16$};
|
|
\node at ++(9.8,-0.4) (12) {$12$};
|
|
\node at ++(10.2,-0.4) (11) {$11$};
|
|
\node at ++(11.8,-0.4) (0) {$0$};
|
|
\end{tikzpicture}\\
|
|
Es stehen maximal $12$ Bit für den Adressoffset zur Verfügung.
|
|
\end{figure}
|
|
\begin{figure}[h]
|
|
30 Befehle ohne Adressen oder Registerangaben:\\
|
|
\begin{tikzpicture}
|
|
\draw (0,0) -- +(12,0); %untere Kante
|
|
\draw (0,0) -- +(0,0.5); %linke Kante
|
|
\draw (0,0.5) -- +(12,0); %obere Kante
|
|
\draw (12,0) -- +(0,0.5); %rechte Kante
|
|
\draw (1.5,0) -- +(0,0.5); %rechte Kante von Opcode1
|
|
\draw (5.0,0) -- +(0,0.5); %rechte Kante von Opcode2
|
|
\draw (7.5,0) -- +(0,0.5); %rechte Kante von Opcode3
|
|
\node at ++(0.7,0.2) (opcode1) {$111$}; %Opcode1
|
|
\node at ++(2.2,0.2) (opcode2) {$1111111$}; %Opcode2
|
|
\node at ++(5.7,0.2) (opcode3) {Opcode}; %Opcode3
|
|
\node at ++(8.5,0.2) (undefined) {unbenutzt}; %unbenutzt
|
|
\node at ++(0.2,-0.4) (31) {$31$};
|
|
\node at ++(1.3,-0.4) (29) {$29$};
|
|
\node at ++(1.7,-0.4) (28) {$28$};
|
|
\node at ++(4.8,-0.4) (22) {$22$};
|
|
\node at ++(5.2,-0.4) (21) {$21$};
|
|
\node at ++(7.3,-0.4) (17) {$17$};
|
|
\node at ++(7.7,-0.4) (16) {$16$};
|
|
\node at ++(11.8,-0.4) (0) {$0$};
|
|
\end{tikzpicture}
|
|
\end{figure}
|
|
|
|
Für die ersten sieben Befehle wird ein dreistelliger Opcode benötigt, um sie voneinander unterscheiden zu können. Da 8 Codes maximal möglich sind, aber nur 7 benutzt werden, kann die achte Kombination (111) als Differenzierung zur zweiten Befehlsanzahl fungieren.
|
|
|
|
Bei dieser wird ein siebenstelliger Opcode benötigt, um die 100 Befehle voneinander unterscheiden zu können. Ein sechsstelliger Opcode würde nur $64$ Befehle unterstützen.
|
|
Die 5-bit Registernummern sind in den beiden ersten Fällen vorhanden und verbrauchen beide Male 5-bit.
|
|
|
|
Der Adressoffset benutzt schließlich die übrigen unbenutzten Stellen.
|
|
|
|
Die 30 restlichen Befehle werden von den vorigen beiden Befehlstypen durch die drei Einsen der ersten Befehle und weiteren 7 Einsen der zweiten Befehle (beide Male sind diese Werte ohne Benutzung) unterschieden. Innerhalb dieser 30 Befehle wird mithilfe eines 5-bit Opcodes zwischen den einzelnen Befehlen unterschieden.
|
|
\section{} %11.3
|
|
Wir nehmen an, dass anstatt 12-bit tatsächlich die 8-bit Kodierung gemeint war. Schließlich kann der Immediate-Wert nur 8-bit darstellen. Daher werden wir im Folgenden die Werte in 8-bit Kodierung darstellen.
|
|
\subsection{} %a
|
|
$185_{10} = 10111001_{2}, rot = 16$
|
|
\subsection{} %b
|
|
$355_{10} = 101100011_{2}$
|
|
Kann nicht dargestellt werden, da der Immediate-Wert nur 8-bit nutzen kann. Hier werden jedoch 9-bit benutzt.
|
|
\subsection{} %c
|
|
$1576_{10} = 11000101_{2}, rot = n.e.$
|
|
Kann nicht dargestellt werden, da durch Rotierung des Immediate-Wertes nicht die nötige Position erreicht werden kann. Es würde eine ungerade Anzahl an Schiebeoperationen erfordern, was hier nicht möglich ist.
|
|
\subsection{} %d
|
|
$1584_{10} = 01100011_{2}, rot = 14$
|
|
\subsection{} %e
|
|
$2415919104_{10} = 00001001_{2}, rot = 2$
|
|
\section{} %11.4
|
|
\subsection{} %a
|
|
0-Adress-Maschine:\\
|
|
PUSH F\\
|
|
PUSH E\\
|
|
PUSH D\\
|
|
MUL\\
|
|
ADD\\
|
|
PUSH C\\
|
|
PUSH B\\
|
|
MUL\\
|
|
PUSH A\\
|
|
SUB\\
|
|
DIV\\
|
|
POP R\\
|
|
\\
|
|
1-Adress-Maschine:\\
|
|
LOAD D\\
|
|
MUL E\\
|
|
ADD F\\
|
|
STORE G\\
|
|
LOAD B\\
|
|
MUL C\\
|
|
STORE H\\
|
|
LOAD A\\
|
|
SUB H\\
|
|
DIV G\\
|
|
STORE R\\
|
|
\\
|
|
2-Adress-Maschine:\\
|
|
MOV G,D\\
|
|
MUL G,E\\
|
|
ADD G,F\\
|
|
MOV H,B\\
|
|
MUL H,C\\
|
|
SUB A,H\\
|
|
DIV A,G\\
|
|
MOV R,A\\
|
|
\\
|
|
3-Adress-Maschine:\\
|
|
LOAD X,D\\
|
|
LOAD Y,E\\
|
|
MUL X,X,Y\\
|
|
LOAD Y,F\\
|
|
ADD X,X,Y\\
|
|
LOAD Y,B\\
|
|
LOAD Z,C\\
|
|
MUL Y,Y,Z\\
|
|
LOAD Z,A\\
|
|
SUB Z,Z,Y\\
|
|
DIV Z,Z,X\\
|
|
STORE R,Z\\
|
|
\subsection{} %b
|
|
Die 0-Adress-Maschine verbraucht $212$ Bit. Die 1-Adress-Maschine verbraucht $236$ Bit. Die 2-Adress-Maschine verbraucht $208$ Bit. Die 3-Adress-Maschine verbraucht $220$ Bit.
|
|
|
|
Die 2-Adress-Maschine verbraucht am wenigsten Bit.
|
|
\end{document}
|