1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
|
\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{tabularx}
\usepackage{multirow}
\usepackage{array}
\usepackage[english,russian]{babel}
% \usepackage[colorlinks=true]{hyperref}
\usepackage{url}
\usepackage{enumitem}
\newcommand{\eqdef}{\stackrel {\rm def}{=}}
\newcommand{\dsint}{\displaystyle\int}
\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}}
\newtheorem{lem}{Лемма}
\begin{document}
% Кафедра (в родительном падеже)
\chair{}
% Тема работы
\title{Регистры процессора 8086}
% Курс
\course{2}
% Группа
\group{231}
% Факультет (в родительном падеже) (по умолчанию "факультета КНиИТ")
\department{факультета КНиИТ}
% Специальность/направление код - наименование
%\napravlenie{09.03.04 "--- Программная инженерия}
%\napravlenie{010500 "--- Математическое обеспечение и администрирование информационных систем}
%\napravlenie{230100 "--- Информатика и вычислительная техника}
%\napravlenie{231000 "--- Программная инженерия}
\napravlenie{10.05.01 "--- Компьютерная безопасность}
% Для студентки. Для работы студента следующая команда не нужна.
% \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
% \tableofcontents
% \section{Лабораторная работа \#1}
\section{Задание}
\textit{Назовите регистры общего назначения (РОН).}
\textit{Определите, какие значения в них записаны?}
Регистрами общего назначения являются:
AX = 0, BX = 0,
CX = 0, DX = 0,
SP = 00FD, BP = 0,
SI = 0, DI = 0
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{registers.png}
\caption{Содержимое регистров}
\end{figure}
\section{Задание}
\textit{Введите в РОН шестнадцатеричные числа 56h, 1F3h, D8h, AB1h.
Просмотрите содержимое всех регистров. Внесите результат в отчет.
Введите во все РОН нулевые значения. Проверьте содержимое регистров}
Ввёл по очереди заданные значения в регистры общего назначения с
помощью команды r. Получил следующий результат.
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{registers_2.png}
\caption{Содержимое регистров}
\end{figure}
После этого заполнил регистры нулями.
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{registers_3.png}
\caption{Содержимое регистров}
\label{fig:reg3}
\end{figure}
\section{Задание}
\textit{Из каких частей состоит адрес ячейки памяти в реальном режиме работы
процессора? Укажите размер сегмента в адресуемой памяти процессора в реальном
режиме. Какой наименьший сдвиг возможен между начальными байтами
последовательных сегментов? Определите текущие адреса сегмента данных и
сегмента кода.}
Адрес ячейки памяти состоит из двух чисел: адреса начала сегмента и размера
смещения относительно начала сегмента. Размер сегмента в адресуемой памяти
процессора в реальном режиме составляет 65536 байт = 64 Кбайт. Наименьший сдвиг
между начальными байтами последовательных сегментов равен 16 байт.
Базовые адреса сегмента данных и кода соответственно хранятся в регистрах
DS и CS. Например, на рис. \ref{fig:reg3} они равны 073Fh.
\section{Задание}
\textit{Определите, с какого адреса должен начинаться сегмент данных, если
сегмент кода имеет размер 64 кбайт. Установите нужное значение адреса
сегмента данных. Введите в область сегмента данных последовательность
чисел 10h,25h,1F,AC. В какой сегмент вводит значения отладчик, исполняя
команду Е со смещением в качестве аргумента? Используйте формат команды
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}
\item Введите в регистр BX значение 1.
\item
Введите в сегмент кода инструкцию сложения со смещением 100.
Установите IP на адрес введенной инструкции. Выполните сложение.
Повторите инструкцию сложения еще трижды, каждый раз устанавливая
соответствующий адрес в IP.
\item Введите в регистр BX значение 2.
\item Введите инструкцию умножения со смещением 102. Выполните эту инструкцию.
\item Выполните инструкцию вычитания 3 раза подряд. Смещение вычитания 104.
\item Выполните инструкцию деления (смещение 106).
\item Вернитесь к инструкции вычитания и выполните её.
\item Какое значение получено в регистре AX? Объясните его.
\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}
|