summaryrefslogtreecommitdiff
path: root/asvt
diff options
context:
space:
mode:
Diffstat (limited to 'asvt')
-rw-r--r--asvt/sem3/lab3/images/7_diagram.pngbin1720408 -> 1753897 bytes
-rw-r--r--asvt/sem3/lab3/lab3.tex83
2 files changed, 66 insertions, 17 deletions
diff --git a/asvt/sem3/lab3/images/7_diagram.png b/asvt/sem3/lab3/images/7_diagram.png
index f9827e2..ac69179 100644
--- a/asvt/sem3/lab3/images/7_diagram.png
+++ b/asvt/sem3/lab3/images/7_diagram.png
Binary files differ
diff --git a/asvt/sem3/lab3/lab3.tex b/asvt/sem3/lab3/lab3.tex
index edf1833..a17b707 100644
--- a/asvt/sem3/lab3/lab3.tex
+++ b/asvt/sem3/lab3/lab3.tex
@@ -150,6 +150,15 @@ B7, выполняйте инструкцию циклического сдви
флага С и содержимого BL в шестнадцатеричном и двоичном формате в таблицу до
восстановления исходного значения регистра.}
+Инструкция RCL BL,1 производит циклический сдвиг байтов влево. Сдвиг происходит
+по следующим правилам:
+
+\begin{enumerate}
+ \item Самый левый бит (старший разряд) записывается во флаг C
+ \item Все биты сдвигаются влево
+ \item Значение флага C записывается в самый правый бит (бит 0)
+\end{enumerate}
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{1_program.png}
@@ -159,7 +168,7 @@ B7, выполняйте инструкцию циклического сдви
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{1_rcl.png}
- \caption{Несколько примеров запуска}
+ \caption{Несколько примеров запуска программы сдвига}
\end{figure}
\begin{table}[H]
@@ -181,7 +190,7 @@ B7, выполняйте инструкцию циклического сдви
0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline
\end{tabularx}
- \caption{Значения флага C}
+ \caption{Значения флага C и регистра DL}
\label{table:flagc}
\end{table}
@@ -189,6 +198,13 @@ B7, выполняйте инструкцию циклического сдви
\textit{Напишите инструкции, выполнение которых приведет к выводу на экран
значения бита переноса в виде цифры (символы 0 и 1, соответствующие коды 30h и 31h).}
+Инструкция ADC выполняет сложение с переносом прт этом задействуя флаг C.
+Результат помещается в регистр AX.
+
+Если в регистре AX было значение 0, то при сложении его со значением 30
+могут получиться значения 30, либо 31 в зависимости от значения флага C.
+Эти значения и являются символами <<0>> и <<1>> в ASCII-таблице.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{2_0.png}
@@ -205,6 +221,10 @@ B7, выполняйте инструкцию циклического сдви
\textit{Напишите программу, которая выводит на экран в двоичном представлении
число, записанное в регистре BL.}
+Поместим произвольное число (например, 2Fh) в регистр BL. Размер регистра BL ---
+8 бит, поэтому счётчик цикла CX установим на 8. Далее, по аналогии с предыдущим
+заданием выведем каждый бит регистра BL.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{3_loop.png}
@@ -219,24 +239,32 @@ Z в зависимости от равенства 0 результата оп
зависимости от того, привела ли операция к переполнению (несоответствующему
изменению знакового флага S)}
+При вычитании с нулевым результатом флаг Z устанавливается в ZR.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{4_sub_zr.png}
\caption{Вычитание с нулевым результатом}
\end{figure}
+При вычитании с отрицательным результатом флаг S устанавливается в NG.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{4_sub_ng.png}
\caption{Вычитание с отрицательным результатом}
\end{figure}
+При вычитании с положительным результатом флаг S устанавливается в PL.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{4_sub_pl.png}
\caption{Вычитание с положительным результатом}
\end{figure}
+При выполнении сложения флаг O не изменялся.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{4_overflow.png}
@@ -252,6 +280,10 @@ Z в зависимости от равенства 0 результата оп
\section{Задание}
\textit{Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.}
+При вычитании из AX нуля результатом арифметического выражения будет значение AX.
+Таким образом, если AX равно нулю, то с помощью инструкции JZ можно пропустить
+операцию обнуления AX. В противном случае, эта операция будет выполнена.
+
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{5.png}
@@ -284,13 +316,13 @@ Z в зависимости от равенства 0 результата оп
\centering
\begin{tabularx}{\textwidth}{ *{3}{|X}| }
\hline
- AX & BX & Флаги-значения \\ \hline
- & & \\ \hline
- & & \\ \hline
- & & \\ \hline
+ AX & BX & Флаги-значения \\ \hline
+ 2 & 2 & NV UP EI PL ZR NA PE NC \\ \hline
+ 2 & 3 & NV UP EI NG NZ AC PE CY \\ \hline
+ 3 & 2 & NV UP EI PL NZ NA PO NC \\ \hline
\end{tabularx}
- \caption{}
+ \caption{Флаги при сравнении разных чисел}
\label{table:flags}
\end{table}
@@ -300,9 +332,14 @@ Z в зависимости от равенства 0 результата оп
одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит
ее на экран (в шестнадцатеричном представлении).}
+Занесём в регистр DX значение регистра BX. В случае если значение BL является
+одной из десятичных цифр (BL < 0xA), то к DX просто добавляем 30h. Если же
+BL $\geq$ 0xA, то к DX надо дополнительно прибавить 7. Это связано с тем, что
+между цифрами и заглавные буквами в ASCII-таблице стоят 7 других символов.
+
\begin{figure}[H]
\centering
- \includegraphics[width=0.8\textwidth]{7_diagram.png}
+ \includegraphics[width=0.7\textwidth]{7_diagram.png}
\caption{Блок-схема программы}
\end{figure}
@@ -342,15 +379,19 @@ Z в зависимости от равенства 0 результата оп
\begin{table}[H]
\footnotesize
\centering
- \begin{tabularx}{\textwidth}{ |p{3.2cm}*{8}{|X}|p{1.5cm}| }
+ \begin{tabularx}{\textwidth}{ |p{0.7cm}|p{3.2cm}*{8}{|X}|p{1.5cm}| }
\hline
- \multirow{2}{*}{№ выполнения сдвига} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{Флаг C} \\ \cline{2-9}
- & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 & \\ \hline
- & & & & & & & & & \\ \hline
- & & & & & & & & & \\ \hline
+ \multirow{2}{*}{CL} & \multirow{2}{*}{№ выполнения сдвига} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{Флаг C} \\ \cline{3-10}
+ & & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 & \\ \hline
+ 1 & 1 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 1 & NC \\ \hline
+ 1 & 2 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & CY \\ \hline
+ 2 & 1 & 0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & CY \\ \hline
+ 2 & 2 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & NC \\ \hline
+ 4 & 1 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & NC \\ \hline
+ 4 & 2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & NC \\ \hline
\end{tabularx}
- \caption{}
+ \caption{Таблица сдвигов}
\label{table:result}
\end{table}
@@ -359,15 +400,23 @@ Z в зависимости от равенства 0 результата оп
\textit{Составьте программу, которая выводит на экран двузначное число из
регистра BL, записанное в шестнадцатеричном формате.}
+В данном задании воспользуемся тем, что результатом логического сложения числа
+0Fh с каким-либо двузначным числом $x$ является новое двузначное число, являющееся
+обратной записью изначального числа $x$.
+
+Занесём в регистр BL произвольное число (например, AE). По аналогии с 7 заданием
+выведем сначала первую цифру числа в регистре BL, затем перевернём это число
+и выведем новую первую цифру.
+
\begin{figure}[H]
\centering
- \includegraphics[width=0.8\textwidth]{9_prog.png}
+ \includegraphics[width=0.7\textwidth]{9_prog.png}
\caption{Текст программы}
-\end{figure}
+\end{figure}
\begin{figure}[H]
\centering
- \includegraphics[width=0.8\textwidth]{9_res.png}
+ \includegraphics[width=0.9\textwidth]{9_res.png}
\caption{Результат работы программы}
\end{figure}