summaryrefslogtreecommitdiff
path: root/labs/lab3/lab3.tex
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2020-04-15 14:57:16 +0400
committerAndrew <saintruler@gmail.com>2020-04-15 14:57:16 +0400
commit25f4267e827b0e61c36e43d5c064f6cf381f6134 (patch)
tree5554fe8f0e4022d75afa2f5add1c49bde2908b23 /labs/lab3/lab3.tex
parente0e2817db1e67028495063bcf8f184eab2b47294 (diff)
Добавил реферат по физре и переименовал папку с первой лабораторной по физре
Diffstat (limited to 'labs/lab3/lab3.tex')
-rw-r--r--labs/lab3/lab3.tex242
1 files changed, 242 insertions, 0 deletions
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}