33 lines
2.1 KiB
TeX
33 lines
2.1 KiB
TeX
\chapter{Overview}
|
|
This is an attempt to distill what I know about how computers work into some kind of emulator / simulator. I'm curious to see if what I know at the moment is enough to allow me to emulate a general purpose computer. A computer that will be big-endian, using 8-bit bytes for its char type. The memory is a 32 bit linear address space allowing for a maximum of 2\textsuperscript{32} bytes to be addressable.
|
|
\section{Registers}
|
|
Eight 32-bit general purpose registers are available for holding operands and memory addresses along with a Flags Register. The Flags Register is a 32-bit register allowing for 32 flags. Currently there are only arithmetic flags which are Overflow (OF), Underflow (UF), and a Zero Flag (ZF). The overflow flag is set if there is a carry. A base pointer register contains a 32 bit address that points to the start of the current stack frame, which is the first opcode of the stack frame. Therefore the first argument would be addressed as such:
|
|
\begin{verbatim}
|
|
mov r1, bp - sizeof(void *)
|
|
\end{verbatim}
|
|
Finally we have the Program Counter which contains a 32 bit address that points to the next instruction to execute.
|
|
\tikzstyle{blockRow} = [rectangle, minimum width=10cm, minimum height=0.5cm, text centered, draw=black]
|
|
|
|
\def\minY{-5} \def\maxY{5}
|
|
\def\minX{-5} \def\maxX{5}
|
|
\begin{figure}[h]
|
|
\centering
|
|
\begin{tikzpicture}[node distance=0cm]
|
|
\node [draw, fit={(\minX, 0) (0, 0.5)}, label=center:Status Register (Flags)] (flags) {};
|
|
%\draw (\minX,0.5) node[above=1em] {31} rectangle (0, 1) node[midway] {Status Register (Flags)} node[above] (lsb) {0};
|
|
\draw (flags);
|
|
\node[above left=of flags] {31};
|
|
\node[above right=of flags] {0};
|
|
|
|
%\draw (\minX,-\pos / 2 - 0.5) rectangle (0, -\pos / 2) node[midway] (register1) {r1};
|
|
|
|
\foreach \pos in {1,...,8} {
|
|
\draw (\minX,-\pos / 2 - 0.5) rectangle (0, -\pos / 2) node[midway] (register\pos) {r\pos};
|
|
}
|
|
%\draw node[above=of register1] {General Purpose Registers};
|
|
|
|
\draw (\maxX / 2, 1) rectangle (\maxX, \minY) node[midway] {Memory};
|
|
\end{tikzpicture}
|
|
\caption{Register Bit Layout}
|
|
\end{figure}
|
|
\section{Memory Layout} |