summaryrefslogtreecommitdiff
path: root/asvt/sem3/lab1/lab1.tex
diff options
context:
space:
mode:
Diffstat (limited to 'asvt/sem3/lab1/lab1.tex')
-rw-r--r--asvt/sem3/lab1/lab1.tex131
1 files changed, 129 insertions, 2 deletions
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}