From 25f4267e827b0e61c36e43d5c064f6cf381f6134 Mon Sep 17 00:00:00 2001
From: Andrew <saintruler@gmail.com>
Date: Wed, 15 Apr 2020 14:57:16 +0400
Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=80?=
 =?UTF-8?q?=D0=B5=D1=84=D0=B5=D1=80=D0=B0=D1=82=20=D0=BF=D0=BE=20=D1=84?=
 =?UTF-8?q?=D0=B8=D0=B7=D1=80=D0=B5=20=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5?=
 =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB=20=D0=BF=D0=B0?=
 =?UTF-8?q?=D0=BF=D0=BA=D1=83=20=D1=81=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE?=
 =?UTF-8?q?=D0=B9=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80?=
 =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BF=D0=BE=20=D1=84=D0=B8=D0=B7=D1=80?=
 =?UTF-8?q?=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 labs/lab3/lab3.tex | 242 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 242 insertions(+)
 create mode 100644 labs/lab3/lab3.tex

(limited to 'labs/lab3/lab3.tex')

diff --git a/labs/lab3/lab3.tex b/labs/lab3/lab3.tex
new file mode 100644
index 0000000..92babc4
--- /dev/null
+++ b/labs/lab3/lab3.tex
@@ -0,0 +1,242 @@
+\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{array}
+\usepackage[english,russian]{babel}
+
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{url}
+
+
+\newcommand{\eqdef}{\stackrel {\rm def}{=}}
+
+\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}}
+
+\newtheorem{lem}{Лемма}
+
+\begin{document}
+
+% Кафедра (в родительном падеже)
+\chair{}
+
+% Тема работы
+\title{Отчет по дисциплине ``Аппаратные средства вычислительной техники'' по лабораторной работе \#3}
+
+% Курс
+\course{1}
+
+% Группа
+\group{131}
+
+% Факультет (в родительном падеже) (по умолчанию "факультета КНиИТ")
+\department{факультета КНиИТ}
+
+% Специальность/направление код - наименование
+%\napravlenie{09.03.04 "--- Программная инженерия}
+%\napravlenie{010500 "--- Математическое обеспечение и администрирование информационных систем}
+%\napravlenie{230100 "--- Информатика и вычислительная техника}
+%\napravlenie{231000 "--- Программная инженерия}
+\napravlenie{090301 "--- Компьютерная безопасность}
+
+% Для студентки. Для работы студента следующая команда не нужна.
+% \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
+
+\section{Задание 1}
+
+\textit{
+    Напишите программу в формате exe, выводящую в шестнадцатеричном виде дамп 
+    самой (коды) себя напрямую в видеобуфер (адрес B8000h) в текстовом режиме. 
+    Программа должна восстанавливать экран после закрытия.
+}
+
+Для выполнения задания я разделил программу на три процедуры:
+
+\begin{itemize}
+    \item \textbf{printWord} -- для вывода символа дампа программы
+    \item \textbf{clearScreen} -- для очистки экрана и сохранения его массив
+    \item \textbf{restoreScreen} -- для восстановления экрана после окончания программы
+\end{itemize}
+
+В основной части программы установил счётчики и вычислил размер дампа программы.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.8\textwidth]{start_label.png}
+    \caption{Основная часть программы}
+    \label{}
+\end{figure}
+
+В процедуре clearScreen я записываю текущее состояние видеопамяти в буфер screenArr.
+Сразу после этого записываю в видеопамять нули, чтобы очистить экран.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{clear_screen.png}
+    \caption{clearScreen}
+    \label{}
+\end{figure}
+
+Дамп программы находится в регистре cs (Code segment). Последовательно читаем то
+количество байт, которое мы вычислили в начале программы и выводим их по одному 
+с помощью процедуры printWord.
+
+В ней мы переводим байты в соответствующие символы по таблице ASCII.
+Цифры в таблице начинаются со значения 30h, а буквы со значения 41h.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.6\textwidth]{print_word.png}
+    \caption{printWord}
+    \label{}
+\end{figure}
+
+После вывода дампа приостановим программу с помощью функции 07h прерывания 21h
+(Ожидания нажатия на любую кнопку).
+
+После этого вызовем функцию restoreScreen, чтобы восстановить экран в прежнее состояние.
+Для этого надо записать в видеопамять значения из буфера screenArr, в который мы записывали
+видеопамять в процедуре clearScreen.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.6\textwidth]{restore_screen.png}
+    \caption{restoreScreen}
+    \label{}
+\end{figure}
+
+Пора запустить программу!
+
+Проассемблируем и слинкуем программу, чтобы создать .exe файл.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{compile.png}
+    \caption{Компилируем...}
+    \label{}
+\end{figure}
+
+Запустил программу с помощью команды VDUMP.EXE и получил дамп этой же программы.
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{run.png}
+    \caption{Читаем дамп}
+    \label{}
+\end{figure}
+
+Получил строку из символов, которая начинается с 51B902...
+Интересно получилось.
+
+После того, как я нажал на кнопку Enter программа закрылась, а экран
+вернулся в то состояние, в котором было до запуска. И тут даже появилась
+введенная команда запуска этой программы!
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{exited.png}
+    \caption{Вернулись домой!}
+    \label{}
+\end{figure}
+
+Попробовал получить дамп программы, которая работает у меня в голове и получилось вот это:
+
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=0.7\textwidth]{mydump.jpg}
+    \caption{}
+    \label{}
+\end{figure}
+
+\end{document}
-- 
cgit v1.2.3

