%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Bilder
\usepackage{graphicx}
\usepackage{graphics}

\usepackage{setspace}
\usepackage{multicol}

% Schriftarten für fettes Monospace
%\usepackage[T1]{fontenc}
%\usepackage{lmodern}

%Kopfzeile
\ihead{Technische Informatik}
\chead{}
\ohead{http://kohnlehome.de/informatik/8-bit-assembler-simulator.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{\href{http://kohnlehome.de/}{Franz Kohnle}}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
Simple 8-bit Assembler Simulator
\end{center}


\begin{itemize}
\item Simulator: \href{https://schweigi.github.io/assembler-simulator/}{schweigi.github.io/assembler-simulator}
\item Dokumentation: \href{https://schweigi.github.io/assembler-simulator/instruction-set.html}{schweigi.github.io/assembler-simulator/instruction-set.html}
\end{itemize}

\section*{Speicher}
\subsection*{Register (6 Byte)}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{l | l | l}
Speicher & Name & Bedeutung\\ \hline
1 Byte & A & beliebige Verwendung\\
1 Byte & B & beliebige Verwendung\\
1 Byte & C & beliebige Verwendung\\
1 Byte & D & beliebige Verwendung\\
1 Byte & IP: Instruction Pointer & enthält Adresse des nächsten Befehls\\
1 Byte & SP: Stack Pointer & enthält Adresse des Stacks\\
\end{tabular}

\subsection*{Flags (3 bit)}
\begin{tabular}{l | l | l}
Speicher & Name & Bedeutung\\ \hline
1 bit & Z: Zero & TRUE, wenn Ergebnis des letzten Befehls 0\\
1 bit & C: Carry & TRUE, wenn letzter Befehl Übertrag erzeugte\\
1 bit & F: Failure & TRUE, wenn letzter Befehl ungültig
\end{tabular}

\subsection*{RAM (256 Byte)}
\begin{tabular}{l | l }
Adresse & Bedeutung \\ \hline
0x00 - ... & Speicher für Programmcode\\
... - 0xE7 & Stack\\
0xE8 - 0xFF & Output
\end{tabular}

\section*{Befehle}
\subsection*{MOV}
\begin{tabular}{l  l }
\texttt{MOV A, B} & Inhalt von B nach A kopieren\\
\texttt{MOV A, 17} & Wert 17 in Register A schreiben\\
\texttt{MOV A, 0x11} & Wert 17 in Register A schreiben\\
\texttt{MOV A, [17]} & Wert der Zelle 17 vom RAM Register A schreiben\\
\texttt{MOV [17], A} & Inhalt des Registers A in Zelle 17 in RAM kopieren\\
\texttt{MOV [17], 25} & Wert 25 in Zelle 17 in RAM schreiben\\
\end{tabular}

\subsection*{Stack}
\begin{tabular}{l  l }
\texttt{PUSH A} & Inhalt von A auf Stack kopieren\\
\texttt{PUSH [17]} & Inhalt der Zelle 17 vom RAM auf Stack kopieren\\
\texttt{POP A} & Inhalt des Stack in Register A kopieren
\end{tabular}

\subsection*{Rechnen}
\begin{tabular}{l  l }
\texttt{ADD A, B} & A += B\\
\texttt{ADD A, [17]} & Inhalt der Speicherzelle 17 vom RAM zu Register A dazuaddieren\\
\texttt{SUB A, B} & A -= B\\
\texttt{INC A} & A ++\\
\texttt{DEC A} & A - -\\
\texttt{MUL B} & A *= B\\
\texttt{DIV B} & A /= B\\
\end{tabular}

\subsection*{Vergleich}
\begin{tabular}{l  l }
\texttt{CMP A, B} & Setzt ZERO-Flag auf TRUE, wenn A==B
\end{tabular}

\subsection*{Sprünge}
\begin{tabular}{l  l }
\texttt{JMP 17} & Sprint in RAM-Zelle 17\\
\texttt{JZ 17} & Sprint in RAM-Zelle 17, wenn ZERO-FLag TRUE\\
\texttt{JNZ 17} & Sprint in RAM-Zelle 17, wenn ZERO-FLag FALSE\\
\end{tabular}

\end{document}

