From bc939202c19c43b86eb8c804432e7af09547a934 Mon Sep 17 00:00:00 2001
From: Camil Staps
Date: Wed, 22 Jun 2016 17:50:40 +0200
Subject: Initial commit

---
 doc/instr.tex | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 doc/instr.tex

(limited to 'doc/instr.tex')

diff --git a/doc/instr.tex b/doc/instr.tex
new file mode 100644
index 0000000..4bc27e0
--- /dev/null
+++ b/doc/instr.tex
@@ -0,0 +1,85 @@
+\section{Instruction Set}
+\label{sec:instr}
+
+\subsection{The Instruction Cycle}
+The instruction cycle is a function $\State\to\State$. It is defined as
+follows:
+
+$$\mathit{cycle}(\prog,\mem) \eqdef (\prog, \instr{\mem.\pc}{\mem})$$
+
+Here, $\instrop$ is a function that maps words to instructions: $\instrop :
+\Word6 \to \Mem \to \Mem$. It is defined in \autoref{sec:instr}.
+
+\subsection{Instructions}
+The binary representations of the commands defined can be found in
+\autoref{fig:instr:instr-set}.
+
+\begin{table}[b]
+	\centering
+	{\tt
+	\begin{tabular}{!>{\normalfont}l | ^l | *{6}{|^c}}
+		\rowstyle{\normalfont\bfseries}
+		Instruction name & Assembly & 5 & 4 & 3 & 2 & 1 & 0 \\\hline
+		Addition         & add      & 1 & 0 & 0 & 0 & 0 & 0 \\\hline
+		Logical NAND     & nand     & 1 & 0 & 0 & 0 & 0 & 1 \\\hline
+		Equality         & eq       & 1 & 0 & 0 & 0 & 1 & 0 \\\hline
+		Conditional jump & cjmp     & 1 & 1 & 0 & 0 & 0 & 0 \\\hline
+		Store register   & str      & 1 & 1 & 1 & 1 & 1 & 0 \\\hline
+		Load register    & ld       & 1 & 1 & 1 & 1 & 1 & 1 \\\hline
+		Store literal 1  & lit1     & 0 & 0 & \multicolumn{4}{c}{$k$} \\\hline
+		Store literal 2  & lit2     & 0 & 1 & \multicolumn{4}{c}{$k$} \\
+	\end{tabular}
+	}
+	\caption{Instruction set\label{fig:instr:instr-set}}
+\end{table}
+
+The instructions are now described. For this we define an auxiliary function
+$\incpcop$, which increments the program counter:
+$$\incpc{\mem} = \update{\mem}{\pc\mapsto\mem.\pc+1}$$
+
+\subsubsection{Addition}
+$$
+	\instr{\texttt{100000}}{\mem} \eqdef
+	\incpc{\update{\mem}{\acc1\mapsto\mem.\acc1+\mem.\acc2}}
+$$
+
+\subsubsection{Logical NAND}
+$$
+	\instr{\texttt{100001}}{\mem} \eqdef
+	\incpc{\update{\mem}{\acc1\mapsto\nand{\mem.\acc1}{\mem.\acc2}}}
+$$
+
+\subsubsection{Equality}
+$$
+	\instr{\texttt{100001}}{\mem} \eqdef
+	\incpc{\update{\mem}{\acc1\mapsto\xnor{\mem.\acc1}{\mem.\acc2}}}
+$$
+
+\subsubsection{Conditional jump}
+$$
+	\instr{\texttt{110000}}{\mem} \eqdef
+	\begin{cases}
+		\update{\mem}{\pc\mapsto\mem.\acc2} & \text{if $\mem.\acc1\neq0$}\\
+		\incpc{\mem} & \text{otherwise}
+	\end{cases}
+$$
+
+\subsubsection{Store register}
+$$
+	\instr{\texttt{111110}}{\mem} \eqdef
+	\incpc{\update{\mem}{\mem.\acc2\mapsto\mem.\acc1}}
+$$
+
+\subsubsection{Load register}
+$$
+	\instr{\texttt{111111}}{\mem} \eqdef
+	\incpc{\update{\mem}{\acc1\mapsto\mem.(\mem.\acc2)}}
+$$
+
+\subsubsection{Store literal}
+\begin{align*}
+	\instr{\texttt{00}k}{\mem} &\eqdef
+	\incpc{\update{\mem}{\acc1\mapsto(\mem.\acc1 \land \texttt{0xf0})\lor k}} \\
+	\instr{\texttt{01}k}{\mem} &\eqdef
+	\incpc{\update{\mem}{\acc1\mapsto(\mem.\acc1 \land \texttt{0x0f})\lor (k \ll 4)}}
+\end{align*}
-- 
cgit v1.2.3

