diff options
| author | Andrew <saintruler@gmail.com> | 2020-12-05 04:15:59 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2020-12-05 04:15:59 +0400 |
| commit | d662cc943b38c249db0de5ca284ff8928a4282bd (patch) | |
| tree | 8d0976dd4adf7fd667c9c5135e7b8e448943356a /asvt/sem3 | |
| parent | fa82af588401a6a6420f627376804f32eb1a58d4 (diff) | |
Дописал третью лабу
Diffstat (limited to 'asvt/sem3')
| -rw-r--r-- | asvt/sem3/lab3/images/7_diagram.png | bin | 1720408 -> 1753897 bytes | |||
| -rw-r--r-- | asvt/sem3/lab3/lab3.tex | 83 |
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 Binary files differindex f9827e2..ac69179 100644 --- a/asvt/sem3/lab3/images/7_diagram.png +++ b/asvt/sem3/lab3/images/7_diagram.png 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} |