\documentclass[12pt, a4paper] {ncc}
\usepackage[utf8] {inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english, russian] {babel}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings,a4wide,longtable,amsmath,amsfonts,graphicx,tikz}
\usepackage{pgfplots}
\usepackage{indentfirst}
\usepackage{bytefield}

\lstdefinelanguage[8051]{Assembler}{
        keywords={cseg, at, mov, anl, dec, orl, jb, ljmp, end, acall, ret,
                  reti},
        comment=[l]{//},
        sensitive=false
}

\begin{document}
\frenchspacing
\pagestyle{empty}
% ============================ ТИТУЛЬНЫЙ ЛИСТ ================================
\begin{center}
     Национальный исследовательский университет информационных технологий,
                              механики и оптики\\
                        Кафедра вычислительной техники\\
                                Организация ЭВМ
\end{center}
\vspace{\stretch{2}}
\begin{center}
                               Курсовая работа\\
                          <<Проектирование микроЭВМ>>
\end{center}
\vspace{\stretch{3}}
\begin{flushright}
                                          Работу выполнил студент группы P3315\\
                                                         {\it Халанский Дмитрий}
\end{flushright}
\vspace{\stretch{4}}
\begin{center}
                                      2016
\end{center}
\newpage
% ======================== КОНЕЦ ТИТУЛЬНОГО ЛИСТА ============================

% ================================ ОТЧЁТ =====================================

\section{Система команд}

\subsection{\tt dec @rj}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\color{lightgray}C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\color{lightgray}P}
\end{bytefield}

Команда записывает в ячейку памяти, адрес которой указан в регистре $R_i$,
значение, на единицу меньшее текущего.

\begin{description}
        \item[Размер] 1 байт
        \item[Число циклов] 1
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{8}
                        \bitboxes*{1}{0000011i}
                \end{bytefield}
        \item[Механизм] $(R_i) \leftarrow (R_i) - 1$
        \item[Пример] \texttt{DEC @R0}
\end{description}
\hrulefill

\subsection{\tt dec a}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\color{lightgray}C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\bf         P}
\end{bytefield}

Команда записывает в аккумулятор $a$ значение, на единицу меньшее текущего.

\begin{description}
        \item[Размер] 1 байт
        \item[Число циклов] 1
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{8}
                        \bitboxes*{1}{00010100}
                \end{bytefield}
        \item[Механизм] $A \leftarrow A - 1$
        \item[Пример] \texttt{DEC A}
\end{description}
\hrulefill

\subsection{\tt orl c, bit}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\bf         C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\color{lightgray}P}
\end{bytefield}

Команда считывает бит, адрес которого указан в операнде \texttt{bit}, и
записывает в $C$ результат логического сложения $C$ с этим битом.

\begin{description}
        \item[Размер] 2 байт
        \item[Число циклов] 2
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{16}
                        \bitboxes*{1}{01110010} &
                                \bitbox{8}{bit\strut}
                \end{bytefield}
        \item[Механизм] $C \leftarrow C \lor b$
        \item[Пример] \texttt{ORL C, 22h}
\end{description}
\hrulefill

\subsection{\tt orl c, /bit}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\bf         C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\color{lightgray}P}
\end{bytefield}

Команда считывает бит, адрес которого указан в операнде \texttt{bit}, и
записывает в $C$ результат логического сложения $C$ с битом, инверсным данному.

\begin{description}
        \item[Размер] 2 байт
        \item[Число циклов] 2
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{16}
                        \bitboxes*{1}{10100000} &
                                \bitbox{8}{bit\strut}
                \end{bytefield}
        \item[Механизм] $C \leftarrow C \lor \neg b$
        \item[Пример] \texttt{ORL C, /22h}
\end{description}
\hrulefill

\subsection{\tt mov a, @rj}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\color{lightgray}C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\bf         P}
\end{bytefield}

Команда записывает в аккумулятор $a$ содержимое ячейки памяти, адрес которой
указан в регистре $R_i$.

\begin{description}
        \item[Размер] 1 байт
        \item[Число циклов] 1
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{8}
                        \bitboxes*{1}{1110011i}
                \end{bytefield}
        \item[Механизм] $A \leftarrow (R_i)$
        \item[Пример] \texttt{MOV A, @R1}
\end{description}
\hrulefill

\subsection{\tt mov a, ad}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\color{lightgray}C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\bf         P}
\end{bytefield}

Команда записывает в аккумулятор $a$ содержимое ячейки памяти по адресу
\texttt{ad}.

\begin{description}
        \item[Размер] 2 байт
        \item[Число циклов] 1
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{16}
                        \bitboxes*{1}{11100101} &
                                \bitbox{8}{ad\strut}
                \end{bytefield}
        \item[Механизм] $A \leftarrow (\text{ad})$
        \item[Пример] \texttt{MOV A, P0}
\end{description}
\hrulefill

\subsection{\tt jb bit, rel}
\begin{bytefield}[bitwidth=2.2em]{8}
        \bitbox{1}{\color{lightgray}C}   &
        \bitbox{1}{\color{lightgray}AC}  &
        \bitbox{1}{\color{lightgray}F0}  &
        \bitbox{1}{\color{lightgray}RS1} &
        \bitbox{1}{\color{lightgray}RS0} &
        \bitbox{1}{\color{lightgray}OV}  &
        \bitbox{1}{\color{lightgray}~}   &
        \bitbox{1}{\color{lightgray}P}
\end{bytefield}

Команда считывает бит \texttt{bit} и, если он установлен, переходит к адресу,
указанному во втором операнде.

\begin{description}
        \item[Размер] 3 байт
        \item[Число циклов] 2
        \item[Кодирование]~\\
                \begin{bytefield}[bitwidth=1.2em]{24}
                        \bitboxes*{1}{00100000} &
                                \bitbox{8}{bit\strut} &
                                \bitbox{8}{rel\strut}
                \end{bytefield}
        \item[Механизм] $\text{PC} \leftarrow \text{PC} + 3$\\
                $\text{IF}\ (\text{bit}) = 1,
                \text{PC} \leftarrow \text{PC} + \text{rel}$
        \item[Пример] \texttt{JB P1.2 LABEL}
\end{description}
\hrulefill

\section{Структура ЭВМ}

\includegraphics[width=0.8\textwidth]{scheme.png}

\section{Функциональный тест на A51}

\subsection{Код программы}

\lstset{language=[8051]Assembler, tabsize=2}
\lstinputlisting{test.asm}

\section{Микропрограммирование}

\lstset{language=C++, tabsize=2}
\lstinputlisting[basicstyle=\tiny]{code_stripped.cpp}

\end{document}

