From d662cc943b38c249db0de5ca284ff8928a4282bd Mon Sep 17 00:00:00 2001
From: Andrew <saintruler@gmail.com>
Date: Sat, 5 Dec 2020 04:15:59 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20=D1=82?=
 =?UTF-8?q?=D1=80=D0=B5=D1=82=D1=8C=D1=8E=20=D0=BB=D0=B0=D0=B1=D1=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 asvt/sem3/lab3/lab3.tex | 83 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 66 insertions(+), 17 deletions(-)

(limited to 'asvt/sem3/lab3/lab3.tex')

diff --git a/asvt/sem3/lab3/lab3.tex b/asvt/sem3/lab3/lab3.tex
index edf1833..a17b707 100644
--- a/asvt/sem3/lab3/lab3.tex
+++ b/asvt/sem3/lab3/lab3.tex
@@ -150,6 +150,15 @@ 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}
@@ -159,7 +168,7 @@ B7, выполняйте инструкцию циклического сдви
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.8\textwidth]{1_rcl.png}
-    \caption{Несколько примеров запуска}
+    \caption{Несколько примеров запуска программы сдвига}
 \end{figure}
 
 \begin{table}[H]
@@ -181,7 +190,7 @@ B7, выполняйте инструкцию циклического сдви
         0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline
     \end{tabularx}
 
-    \caption{Значения флага C}
+    \caption{Значения флага C и регистра DL}
     \label{table:flagc}
 \end{table}
 
@@ -189,6 +198,13 @@ B7, выполняйте инструкцию циклического сдви
 \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}
@@ -205,6 +221,10 @@ B7, выполняйте инструкцию циклического сдви
 \textit{Напишите программу, которая выводит на экран в двоичном представлении 
 число, записанное в регистре BL.}
 
+Поместим произвольное число (например, 2Fh) в регистр BL. Размер регистра BL ---
+8 бит, поэтому счётчик цикла CX установим на 8. Далее, по аналогии с предыдущим
+заданием выведем каждый бит регистра BL.
+
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.8\textwidth]{3_loop.png}
@@ -219,24 +239,32 @@ Z в зависимости от равенства 0 результата оп
 зависимости от того, привела ли операция к переполнению (несоответствующему 
 изменению знакового флага 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}
@@ -252,6 +280,10 @@ Z в зависимости от равенства 0 результата оп
 \section{Задание}
 \textit{Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.}
 
+При вычитании из AX нуля результатом арифметического выражения будет значение AX.
+Таким образом, если AX равно нулю, то с помощью инструкции JZ можно пропустить
+операцию обнуления AX. В противном случае, эта операция будет выполнена.
+
 \begin{figure}[H]
     \centering
     \includegraphics[width=0.8\textwidth]{5.png}
@@ -284,13 +316,13 @@ Z в зависимости от равенства 0 результата оп
     \centering
     \begin{tabularx}{\textwidth}{ *{3}{|X}| }
         \hline
-        AX & BX & Флаги-значения \\ \hline
-           &    &                \\ \hline
-           &    &                \\ \hline
-           &    &                \\ \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{}
+    \caption{Флаги при сравнении разных чисел}
     \label{table:flags}
 \end{table}
 
@@ -300,9 +332,14 @@ Z в зависимости от равенства 0 результата оп
 одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит 
 ее на экран (в шестнадцатеричном представлении).}
 
+Занесём в регистр DX значение регистра BX. В случае если значение BL является
+одной из десятичных цифр (BL < 0xA), то к DX просто добавляем 30h. Если же
+BL $\geq$ 0xA, то к DX надо дополнительно прибавить 7. Это связано с тем, что
+между цифрами и заглавные буквами в ASCII-таблице стоят 7 других символов.
+
 \begin{figure}[H]
     \centering
-    \includegraphics[width=0.8\textwidth]{7_diagram.png}
+    \includegraphics[width=0.7\textwidth]{7_diagram.png}
     \caption{Блок-схема программы}
 \end{figure}
 
@@ -342,15 +379,19 @@ Z в зависимости от равенства 0 результата оп
 \begin{table}[H]
     \footnotesize
     \centering
-    \begin{tabularx}{\textwidth}{ |p{3.2cm}*{8}{|X}|p{1.5cm}| }
+    \begin{tabularx}{\textwidth}{ |p{0.7cm}|p{3.2cm}*{8}{|X}|p{1.5cm}| }
         \hline
-        \multirow{2}{*}{№ выполнения сдвига} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{Флаг C} \\ \cline{2-9}
-         & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 &  \\ \hline
-         &  &  &  &  &  &  &  &  &  \\ \hline
-         &  &  &  &  &  &  &  &  &  \\ \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{}
+    \caption{Таблица сдвигов}
     \label{table:result}
 \end{table}
 
@@ -359,15 +400,23 @@ Z в зависимости от равенства 0 результата оп
 \textit{Составьте программу, которая выводит на экран двузначное число из
 регистра BL, записанное в шестнадцатеричном формате.}
 
+В данном задании воспользуемся тем, что результатом логического сложения числа
+0Fh с каким-либо двузначным числом $x$ является новое двузначное число, являющееся
+обратной записью изначального числа $x$.
+
+Занесём в регистр BL произвольное число (например, AE). По аналогии с 7 заданием
+выведем сначала первую цифру числа в регистре BL, затем перевернём это число
+и выведем новую первую цифру.
+
 \begin{figure}[H]
     \centering
-    \includegraphics[width=0.8\textwidth]{9_prog.png}
+    \includegraphics[width=0.7\textwidth]{9_prog.png}
     \caption{Текст программы}
-\end{figure} 
+\end{figure}
 
 \begin{figure}[H]
     \centering
-    \includegraphics[width=0.8\textwidth]{9_res.png}
+    \includegraphics[width=0.9\textwidth]{9_res.png}
     \caption{Результат работы программы}
 \end{figure} 
 
-- 
cgit v1.2.3

