diff options
| author | Andrew <saintruler@gmail.com> | 2020-04-15 14:57:16 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2020-04-15 14:57:16 +0400 |
| commit | 25f4267e827b0e61c36e43d5c064f6cf381f6134 (patch) | |
| tree | 5554fe8f0e4022d75afa2f5add1c49bde2908b23 /labs/lab3/lab3.tex | |
| parent | e0e2817db1e67028495063bcf8f184eab2b47294 (diff) | |
Добавил реферат по физре и переименовал папку с первой лабораторной по физре
Diffstat (limited to 'labs/lab3/lab3.tex')
| -rw-r--r-- | labs/lab3/lab3.tex | 242 |
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} |