From a13a8f51218c8ffbc12cb7f9b5123fea950b85e7 Mon Sep 17 00:00:00 2001
From: Andrew <saintruler@gmail.com>
Date: Fri, 4 Dec 2020 17:04:42 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BF?=
 =?UTF-8?q?=D0=B5=D1=80=D0=B2=D1=83=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/lab1/lab1.tex | 131 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 129 insertions(+), 2 deletions(-)

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

diff --git a/asvt/sem3/lab1/lab1.tex b/asvt/sem3/lab1/lab1.tex
index 9554c21..ce9709e 100644
--- a/asvt/sem3/lab1/lab1.tex
+++ b/asvt/sem3/lab1/lab1.tex
@@ -192,8 +192,8 @@ SI = 0, DI = 0
 
 Адрес ячейки памяти состоит из двух чисел: адреса начала сегмента и размера
 смещения относительно начала сегмента. Размер сегмента в адресуемой памяти
-процессора в реальном режиме составляет 65536 байт. Наименьший сдвиг между 
-начальными байтами последовательных сегментов равен 16 байт.
+процессора в реальном режиме составляет 65536 байт = 64 Кбайт. Наименьший сдвиг
+между начальными байтами последовательных сегментов равен 16 байт.
 
 Базовые адреса сегмента данных и кода соответственно хранятся в регистрах
 DS и CS. Например, на рис. \ref{fig:reg3} они равны 073Fh.
@@ -208,6 +208,37 @@ DS и CS. Например, на рис. \ref{fig:reg3} они равны 073Fh.
 E<сегмент>.<смещение> для ввода кода инструкции ADD в сегмент кода,
 начиная со смещения 0100}
 
+Если сегмент кода имеет размер 64 кбайт, то для определения адреса сегмента
+данных необходимо к адресу сегмента кода прибавить число 1000h 
+(64 кбайт = 65536 байт = 10000h байт, но в регистрах хранятся только
+4 первые цифры адреса, поэтому последний ноль необходимо откинуть).
+Таким образом, получается, что адрес сегмента данных должен быть 173Fh. 
+Запишем это число в регистр DS.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.6\textwidth]{reg_ds.png}
+    \caption{Изменение адреса сегмента данных}
+\end{figure}
+
+Введём в область сегмента данных указанные значения. При указании смещения
+без явного указания адреса сегмента отладчик вводит значения в сегмент DS.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{ds_data.png}
+    \caption{Изменение сегмента данных}
+\end{figure}
+
+Для внесения инструкции ADD в сегмент кода с помощью команды E необходимо явно
+указать адрес начала сегмента вместе со смещением.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{e_cs.png}
+    \caption{Ввод инструкции ADD}
+\end{figure}
+
 
 \section{Задание}
 \begin{enumerate}
@@ -226,17 +257,113 @@ E<сегмент>.<смещение> для ввода кода инструкц
     \item Что изменилось в регистре флагов и почему?
 \end{enumerate}
 
+Введём значение 1 в регистр BX с помощью команды R, а инструкцию сложения в 
+сегмент кода с помощью команды E. Можно заметить, что в регистре IP уже
+внесено подходящее нам значение 0100h. Выполним сложение с помощью команды T.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{addition.png}
+    \caption{Выполнение сложения}
+\end{figure}
+
+Выполним сложение ещё три раза, изменяя значение в регистре IP. Можно заметить,
+что в регистре AX теперь хранится значение 4.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{ip_change.png}
+    \caption{Выполнение сложения ещё три раза}
+\end{figure}
+
+Выполним следующие инструкции по заданию.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.3\textwidth]{rbx.png}
+    \caption{Введение значения 2 в регистр BX}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{e_mul.png}
+    \caption{Введение и выполнение инструкции MUL}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{e_sub.png}
+    \caption{Введение инструкции SUB}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{subx3.png}
+    \caption{Выполнение инструкции SUB 3 раза}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{e_div.png}
+    \caption{Введение и выполнение инструкции DIV}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{sub_again.png}
+    \caption{Возврат к инструкции SUB и её выполнение}
+\end{figure}
+
+В результате выполнения указанных операций в регистре AX получено значение
+FFFFh. Такое значение можно объяснить тем, что в регистре AX не могут храниться
+отрицательные числа. Также данные операции изменили флаги знака NG, 
+добавочного переноса AC, чётности PE и переноса CY.
 
 \section{Задание}
 \textit{Выведите листинг сегмента кода со смещения 100. Скопируйте его в отчет.
 Разделите число 7С4B12h на число 1С0. Чему равно частное и остаток? Чему равно
 произведение чисел 7C4Bh и 1A5?}
 
+Листинг сегмента кода можно выполнить с помощью команды U.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{listing.png}
+    \caption{Листинг сегмента кода}
+\end{figure}
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{e_div_6.png}
+    \caption{Выполнение деления}
+\end{figure}
+
+Результат деления содержится в регистре AX --- это число 4706h.
+Остаток деления содержится в регистре DX --- это число 92h.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.6\textwidth]{e_mul_6.png}
+    \caption{Выполнение умножения}
+\end{figure}
+
+Результатом произведения является число CC6757h.
 
 \section{Задание}
 \textit{Введите код прерывания 21 со смещением 104, укажите номер прерывания 
 02h код символа 44h. Выполните инструкцию командой g от 104 до 106. Попробуйте 
 объяснить полученный результат.}
 
+Выполним по порядку операции, указанные в задании.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.6\textwidth]{int21.png}
+    \caption{Выполнение указанных операций}
+\end{figure}
+
+В результате на экран вывелась буква <<D>>. Это произошло из-за того, что с
+помощью прерывания 21h была вызвана функция вывода символа 02h. При этом был
+выведен символ 44h, который и является буквой <<D>>.
 
 \end{document}
-- 
cgit v1.2.3

