\documentclass[bachelor, och, labwork]{SCWorks}
% параметр - тип обучения - одно из значений:
%    spec     - специальность
%    bachelor - бакалавриат (по умолчанию)
%    master   - магистратура
% параметр - форма обучения - одно из значений:
%    och   - очное (по умолчанию)
%    zaoch - заочное
% параметр - тип работы - одно из значений:
%    referat    - реферат
%    coursework - курсовая работа (по умолчанию)
%    diploma    - дипломная работа
%    pract      - отчет по практике
% параметр - включение шрифта
%    times    - включение шрифта Times New Roman (если установлен)
%               по умолчанию выключен

\usepackage{subfigure}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.5}
\usepackage{float}

%\usepackage{titlesec}
\setcounter{secnumdepth}{4}
%\titleformat{\paragraph}
%{\normalfont\normalsize}{\theparagraph}{1em}{}
%\titlespacing*{\paragraph}
%{35.5pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}

\titleformat{\paragraph}[block]
{\hspace{1.25cm}\normalfont}
{\theparagraph}{1ex}{}
\titlespacing{\paragraph}
{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}

% --------------------------------------------------------------------------%


\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\graphicspath{ {./images/} }
\usepackage{tempora}

\usepackage[sort,compress]{cite}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{fancyvrb}
\usepackage{listings}
\usepackage{listingsutf8}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{array}
\usepackage[english,russian]{babel}

% \usepackage[colorlinks=true]{hyperref}
\usepackage{url}

\usepackage{enumitem}


\newcommand{\eqdef}{\stackrel {\rm def}{=}}
\newcommand{\dsint}{\displaystyle\int}

\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}}

\newtheorem{lem}{Лемма}

\begin{document}

% Кафедра (в родительном падеже)
\chair{}

% Тема работы
\title{Флаговый регистр}

% Курс
\course{2}

% Группа
\group{231}

% Факультет (в родительном падеже) (по умолчанию "факультета КНиИТ")
\department{факультета КНиИТ}

% Специальность/направление код - наименование
%\napravlenie{09.03.04 "--- Программная инженерия}
%\napravlenie{010500 "--- Математическое обеспечение и администрирование информационных систем}
%\napravlenie{230100 "--- Информатика и вычислительная техника}
%\napravlenie{231000 "--- Программная инженерия}
\napravlenie{10.05.01 "--- Компьютерная безопасность}

% Для студентки. Для работы студента следующая команда не нужна.
% \studenttitle{Студентки}

% Фамилия, имя, отчество в родительном падеже
\author{Гущина Андрея Юрьевича}

% Заведующий кафедрой
% \chtitle{} % степень, звание
% \chname{}

%Научный руководитель (для реферата преподаватель проверяющий работу)
\satitle{ассистент} %должность, степень, звание
\saname{А.~А.~Трунов}

% Руководитель практики от организации (только для практики,
% для остальных типов работ не используется)
% \patitle{к.ф.-м.н.}
% \paname{С.~В.~Миронов}

% Семестр (только для практики, для остальных
% типов работ не используется)
%\term{8}

% Наименование практики (только для практики, для остальных
% типов работ не используется)
%\practtype{преддипломная}

% Продолжительность практики (количество недель) (только для практики,
% для остальных типов работ не используется)
%\duration{4}

% Даты начала и окончания практики (только для практики, для остальных
% типов работ не используется)
%\practStart{30.04.2019}
%\practFinish{27.05.2019}

% Год выполнения отчета
\date{2020}

\maketitle

% Включение нумерации рисунков, формул и таблиц по разделам
% (по умолчанию - нумерация сквозная)
% (допускается оба вида нумерации)
% \secNumbering


% \tableofcontents

% \section{Лабораторная работа \#1}


\section{Задание}
\textit{Поместите инструкцию RCL BL,1 по адресу 100, занесите в регистр число
B7, выполняйте инструкцию циклического сдвига, каждый раз записывая значения 
флага С и содержимого BL в шестнадцатеричном и двоичном формате в таблицу до 
восстановления исходного значения регистра.}

Инструкция RCL BL,1 производит циклический сдвиг байтов влево. Сдвиг происходит
по следующим правилам:

\begin{enumerate}
    \item Самый левый бит (старший разряд) записывается во флаг C
    \item Все биты сдвигаются влево
    \item Значение флага C записывается в самый правый бит (бит 0)
\end{enumerate}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{1_program.png}
    \caption{Ввод программы}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{1_rcl.png}
    \caption{Несколько примеров запуска программы сдвига}
\end{figure}

\begin{table}[H]
    \footnotesize
    \centering
    \begin{tabularx}{\textwidth}{ |p{1cm}*{8}{|X}|p{1.5cm}| }
        \hline
        \multirow{2}{*}{C} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{BL} \\ \cline{2-9}
          & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 &    \\ \hline
        0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline
        1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & 0 & 6E \\ \hline
        0 & 1 & 1 & 0 & 1 & 1 & 1 & 0 & 1 & DD \\ \hline
        1 & 1 & 0 & 1 & 1 & 1 & 0 & 1 & 0 & BA \\ \hline
        1 & 0 & 1 & 1 & 1 & 0 & 1 & 0 & 1 & 75 \\ \hline
        0 & 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 & EB \\ \hline
        1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 & 0 & D6 \\ \hline
        1 & 1 & 0 & 1 & 0 & 1 & 1 & 0 & 1 & AD \\ \hline
        1 & 0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 5B \\ \hline
        0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline
    \end{tabularx}

    \caption{Значения флага C и регистра DL}
    \label{table:flagc}
\end{table}

\section{Задание}
\textit{Напишите инструкции, выполнение которых приведет к выводу на экран 
значения бита переноса в виде цифры (символы 0 и 1, соответствующие коды 30h и 31h).}

Инструкция ADC выполняет сложение с переносом прт этом задействуя флаг C.
Результат помещается в регистр AX.

Если в регистре AX было значение 0, то при сложении его со значением 30
могут получиться значения 30, либо 31 в зависимости от значения флага C.
Эти значения и являются символами <<0>> и <<1>> в ASCII-таблице.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{2_0.png}
    \caption{Бит переноса равен 0}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{2_1.png}
    \caption{Бит переноса равен 1}
\end{figure}

\section{Задание}
\textit{Напишите программу, которая выводит на экран в двоичном представлении 
число, записанное в регистре BL.}

Поместим произвольное число (например, 2Fh) в регистр BL. Размер регистра BL ---
8 бит, поэтому счётчик цикла CX установим на 8. Далее, по аналогии с предыдущим
заданием выведем каждый бит регистра BL.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{3_loop.png}
    \caption{Ввод и запуск программы}
\end{figure}

\section{Задание}
\textit{Используя операцию вычитания, проанализируйте изменение значения флага 
Z в зависимости от равенства 0 результата операции. Проанализируйте изменение 
значения флага S в зависимости от знака результата операции вычитания. 
Используя операцию сложения, проанализируйте изменение значения флага O в 
зависимости от того, привела ли операция к переполнению (несоответствующему 
изменению знакового флага S)}

При вычитании с нулевым результатом флаг Z устанавливается в ZR.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{4_sub_zr.png}
    \caption{Вычитание с нулевым результатом}
\end{figure}

При вычитании с отрицательным результатом флаг S устанавливается в NG.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{4_sub_ng.png}
    \caption{Вычитание с отрицательным результатом}
\end{figure}

При вычитании с положительным результатом флаг S устанавливается в PL.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{4_sub_pl.png}
    \caption{Вычитание с положительным результатом}
\end{figure}

При выполнении сложения флаг O не изменялся.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{4_overflow.png}
    \caption{Сложение с переполнением}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{4_noverflow.png}
    \caption{Сложение без переполнения}
\end{figure}

\section{Задание}
\textit{Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.}

При вычитании из AX нуля результатом арифметического выражения будет значение AX.
Таким образом, если AX равно нулю, то с помощью инструкции JZ можно пропустить
операцию обнуления AX. В противном случае, эта операция будет выполнена.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{5.png}
    \caption{Обнуление регистра AX}
\end{figure}

\section{Задание}
\textit{Проанализируйте изменения флагов при сравнении разных чисел и составьте таблицу.}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{6_eq.png}
    \caption{Операнды равны}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{6_gt.png}
    \caption{Первый операнд больше второго}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{6_lt.png}
    \caption{Второй операнд больше первого}
\end{figure}

\begin{table}[H]
    \footnotesize
    \centering
    \begin{tabularx}{\textwidth}{ *{3}{|X}| }
        \hline
        AX & BX & Флаги-значения          \\ \hline
        2  & 2  & NV UP EI PL ZR NA PE NC \\ \hline
        2  & 3  & NV UP EI NG NZ AC PE CY \\ \hline
        3  & 2  & NV UP EI PL NZ NA PO NC \\ \hline
    \end{tabularx}

    \caption{Флаги при сравнении разных чисел}
    \label{table:flags}
\end{table}


\section{Задание}
\textit{Составьте блок-схему и напишите на ассемблере программу, которая берет
одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит 
ее на экран (в шестнадцатеричном представлении).}

Занесём в регистр DX значение регистра BX. В случае если значение BL является
одной из десятичных цифр (BL < 0xA), то к DX просто добавляем 30h. Если же
BL $\geq$ 0xA, то к DX надо дополнительно прибавить 7. Это связано с тем, что
между цифрами и заглавные буквами в ASCII-таблице стоят 7 других символов.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{7_diagram.png}
    \caption{Блок-схема программы}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{7_program.png}
    \caption{Текст программы}
\end{figure} 

\section{Задание}
\textit{Занесите в регистр DX число 72h Проанализируйте результат выполнения
оператора SHR DL,CL при значениях в регистре CL равных 1,2,4, представьте 
результат в виде таблицы.}

\textit{Какой сдвиг нужно выполнить, чтобы перевести цифру старшего разряда 
числа 72h в позицию младшего разряда? Какая цифра будет при этом записана в 
старшем разряде числа BL?}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{8_cl1.png}
    \caption{Результат при CL = 1}
\end{figure} 

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{8_cl2.png}
    \caption{Результат при CL = 2}
\end{figure} 

\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{8_cl3.png}
    \caption{Результат при CL = 3}
\end{figure} 

\begin{table}[H]
    \footnotesize
    \centering
    \begin{tabularx}{\textwidth}{ |p{0.7cm}|p{3.2cm}*{8}{|X}|p{1.5cm}| }
        \hline
        \multirow{2}{*}{CL} & \multirow{2}{*}{№ выполнения сдвига} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{Флаг C} \\ \cline{3-10}
          &   & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 &    \\ \hline
        1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 1 & NC \\ \hline
        1 & 2 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & CY \\ \hline
        2 & 1 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & CY \\ \hline
        2 & 2 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & NC \\ \hline
        4 & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & NC \\ \hline
        4 & 2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & NC \\ \hline
    \end{tabularx}

    \caption{Таблица сдвигов}
    \label{table:result}
\end{table}

Для перевода цифры старшего разряда числа 72h в позицию младшего разряда,
необходимо выполнить сдвиг на 4 бита вправо. В старшем разряде числа BL
при этом будет записана цифра 0.

\section{Задание}
\textit{Составьте программу, которая выводит на экран двузначное число из
регистра BL, записанное в шестнадцатеричном формате.}

В данном задании воспользуемся тем, что результатом логического сложения числа
0Fh с каким-либо двузначным числом $x$ является новое двузначное число, являющееся
обратной записью изначального числа $x$.

Занесём в регистр BL произвольное число (например, AE). По аналогии с 7 заданием
выведем сначала первую цифру числа в регистре BL, затем перевернём это число
и выведем новую первую цифру.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.7\textwidth]{9_prog.png}
    \caption{Текст программы}
\end{figure}

\begin{figure}[H]
    \centering
    \includegraphics[width=0.9\textwidth]{9_res.png}
    \caption{Результат работы программы}
\end{figure} 

\end{document}
