\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{Флаговый регистр} % Курс \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{Поместите инструкцию RCL BL,1 по адресу 100, занесите в регистр число 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} \caption{Ввод программы} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{1_rcl.png} \caption{Несколько примеров запуска программы сдвига} \end{figure} \begin{table}[H] \footnotesize \centering \begin{tabularx}{\textwidth}{ |p{1cm}*{8}{|X}|p{1.5cm}| } \hline \multirow{2}{*}{C} & \multicolumn{8}{c|}{Биты DL} & \multirow{2}{*}{BL} \\ \cline{2-9} & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 & \\ \hline 0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & 0 & 6E \\ \hline 0 & 1 & 1 & 0 & 1 & 1 & 1 & 0 & 1 & DD \\ \hline 1 & 1 & 0 & 1 & 1 & 1 & 0 & 1 & 0 & BA \\ \hline 1 & 0 & 1 & 1 & 1 & 0 & 1 & 0 & 1 & 75 \\ \hline 0 & 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 & EB \\ \hline 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 & 0 & D6 \\ \hline 1 & 1 & 0 & 1 & 0 & 1 & 1 & 0 & 1 & AD \\ \hline 1 & 0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 5B \\ \hline 0 & 1 & 0 & 1 & 1 & 0 & 1 & 1 & 1 & B7 \\ \hline \end{tabularx} \caption{Значения флага C и регистра DL} \label{table:flagc} \end{table} \section{Задание} \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} \caption{Бит переноса равен 0} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{2_1.png} \caption{Бит переноса равен 1} \end{figure} \section{Задание} \textit{Напишите программу, которая выводит на экран в двоичном представлении число, записанное в регистре BL.} Поместим произвольное число (например, 2Fh) в регистр BL. Размер регистра BL --- 8 бит, поэтому счётчик цикла CX установим на 8. Далее, по аналогии с предыдущим заданием выведем каждый бит регистра BL. \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{3_loop.png} \caption{Ввод и запуск программы} \end{figure} \section{Задание} \textit{Используя операцию вычитания, проанализируйте изменение значения флага Z в зависимости от равенства 0 результата операции. Проанализируйте изменение значения флага S в зависимости от знака результата операции вычитания. Используя операцию сложения, проанализируйте изменение значения флага O в зависимости от того, привела ли операция к переполнению (несоответствующему изменению знакового флага 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} \caption{Сложение с переполнением} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{4_noverflow.png} \caption{Сложение без переполнения} \end{figure} \section{Задание} \textit{Составьте программу обнуления регистра AX, в котором исходно записано некоторое число.} При вычитании из AX нуля результатом арифметического выражения будет значение AX. Таким образом, если AX равно нулю, то с помощью инструкции JZ можно пропустить операцию обнуления AX. В противном случае, эта операция будет выполнена. \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{5.png} \caption{Обнуление регистра AX} \end{figure} \section{Задание} \textit{Проанализируйте изменения флагов при сравнении разных чисел и составьте таблицу.} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{6_eq.png} \caption{Операнды равны} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{6_gt.png} \caption{Первый операнд больше второго} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{6_lt.png} \caption{Второй операнд больше первого} \end{figure} \begin{table}[H] \footnotesize \centering \begin{tabularx}{\textwidth}{ *{3}{|X}| } \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{Флаги при сравнении разных чисел} \label{table:flags} \end{table} \section{Задание} \textit{Составьте блок-схему и напишите на ассемблере программу, которая берет одну цифру младшего разряда из регистра BL (в BX записано число Аh) и выводит ее на экран (в шестнадцатеричном представлении).} Занесём в регистр DX значение регистра BX. В случае если значение BL является одной из десятичных цифр (BL < 0xA), то к DX просто добавляем 30h. Если же BL $\geq$ 0xA, то к DX надо дополнительно прибавить 7. Это связано с тем, что между цифрами и заглавные буквами в ASCII-таблице стоят 7 других символов. \begin{figure}[H] \centering \includegraphics[width=0.7\textwidth]{7_diagram.png} \caption{Блок-схема программы} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{7_program.png} \caption{Текст программы} \end{figure} \section{Задание} \textit{Занесите в регистр DX число 72h Проанализируйте результат выполнения оператора SHR DL,CL при значениях в регистре CL равных 1,2,4, представьте результат в виде таблицы.} \textit{Какой сдвиг нужно выполнить, чтобы перевести цифру старшего разряда числа 72h в позицию младшего разряда? Какая цифра будет при этом записана в старшем разряде числа BL?} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{8_cl1.png} \caption{Результат при CL = 1} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{8_cl2.png} \caption{Результат при CL = 2} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.8\textwidth]{8_cl3.png} \caption{Результат при CL = 4} \end{figure} \begin{table}[H] \footnotesize \centering \begin{tabularx}{\textwidth}{ |p{0.7cm}|p{3.2cm}*{8}{|X}|p{1.5cm}| } \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{Таблица сдвигов} \label{table:result} \end{table} Для перевода цифры старшего разряда числа 72h в позицию младшего разряда, необходимо выполнить сдвиг на 4 бита вправо. В старшем разряде числа BL при этом будет записана цифра 0. \section{Задание} \textit{Составьте программу, которая выводит на экран двузначное число из регистра BL, записанное в шестнадцатеричном формате.} В данном задании воспользуемся тем, что результатом логического сложения числа 0Fh с каким-либо двузначным числом $x$ является новое двузначное число, являющееся обратной записью изначального числа $x$. Занесём в регистр BL произвольное число (например, AE). По аналогии с 7 заданием выведем сначала первую цифру числа в регистре BL, затем перевернём это число и выведем новую первую цифру. \begin{figure}[H] \centering \includegraphics[width=0.7\textwidth]{9_prog.png} \caption{Текст программы} \end{figure} \begin{figure}[H] \centering \includegraphics[width=0.9\textwidth]{9_res.png} \caption{Результат работы программы} \end{figure} \end{document}