Выполнение контрольной работы
Контрольная работа предусмотрена учебным планом в качестве формы промежуточного контроля при освоении студентами теоретического материала. Оценка за контрольную работу может учитываться в итоговой оценке по дисциплине.
1. Общие требования
Контрольная работа включает в себя решение двух задач из соответствующего варианта, который выбирается из приложения. Номер варианта равен порядковому номеру студента в списке группы.
Работа выполняется на листах стандартной писчей бумаги формата А4 в соответствии с действующим стандартом академии СТП 1.01.-2002.Стандарт предприятия. Общие требования к оформлению учебных документов.
2. Рекомендации по выполнению
Поскольку контрольная работа включает в себя решение двух задач, то нижеследуемые рекомендации относятся к решению каждой задачи.
В любой задаче обрабатываются некоторые данные. При выполнении контрольной работы все данные всегда описываются в сегменте данных. Если в формулировке задачи не хватает некоторых данных, то их необходимо определить самостоятельно.
При этом обрабатываемые данные не требуется инициализировать на конкретные значения, а необходимо выполнить лишь описание ячеек памяти для хранения этих данных.
Контрольную работу рекомендуется выполнять в следующем порядке:
1) четко осмыслить и описать данные, обрабатываемые в задаче;
2) наметить путь решения по обработке данных;
3) изобразить граф-схему алгоритма решения поставленной задачи;
4) выполнить кодирование разработанного алгоритма на языке ассемблера;
5) записать решение задачи в соответствии с полной структурой текста программы.
3. Содержание пояснительной записки
Пояснительная записка к контрольной работе должна содержать:
1) титульный лист, подписанный студентом;
2) введение;
3) формулировка первой задачи варианта;
4) граф-схемы алгоритмов решения первой задачи;
5) исходный текст программы для решения первой задачи;
6) формулировка второй задачи варианта;
7) граф-схемы алгоритмов решения второй задачи;
8) исходный текст программы для решения второй задачи;
9) заключение;
10) оглавление.
4. Пример выполнения контрольной работы.
Пусть в заданном варианте имеются две задачи.
Задача 1. Написать подпрограмму для вычисления суммы элементов некоторого массива слов без знака. С помощью этой подпрограммы обработать два массива.
Задача 2. Написать макрокоманду для вычисления суммы элементов некоторого массива слов без знака. С помощью этой макрокоманды обработать два массива.
Решение задачи 1.
Из условия задачи следует, что разрабатываемая подпрограмма должна обрабатывать два массива. Следовательно, она должна работать с передачей параметров. Поскольку способ передачи параметров не указан, то можно выбрать любой. Для простоты будем считать, что параметры в подпрограмму будут передаваться через регистры.
Обрабатываемые данные представляют собой массивы слов без знака, которые могут содержать различное количество элементов. Следовательно, описание входных массивов должно быть описанием одномерных массивов слов. Результат будет представлен одним двойным словом для каждого входного массива.
Решение данной задачи сводится к прибавлению очередного элемента входного массива к накопителю результата, который сначала должен быть обнулен. Поскольку результат является двойным словом, то и накопитель должен быть реализован на двух 16-битных регистрах.
Подпрограмма работает с передачей параметров, которая осуществляется на макроуровне программы. Поэтому полный алгоритм программы будет включать в себя алгоритм макроуровня и алгоритм подпрограммы, представленные на рис. 5.1.
Рис. 5.1. Алгоритм решения задачи 1
а) алгоритм макроуровня; б) алгоритм подпрограммы
Исходный текст для решения задачи 1 запишем сразу по полной форме.
Name | WordSumm | ||||
Data | Segment | ||||
Arr1 | DW | 100 DUP(?) | ; Описание 1-го массива | ||
Arr2 | DW | 200 DUP(?) | ; Описание 2-го массива | ||
Sum1 | DD | ? | ; Описание 1-го результата | ||
Sum2 | DD | ? | ; Описание 2-го результата | ||
Data | Ends | ||||
Stack | Segment | ||||
DW | 5 DUP(?) | ||||
Top | Labеl | Word | |||
Code | Segment | ||||
Assume CS:Code, DS:Data, SS:Stack | |||||
; Описание процедуры | |||||
Summ | Рroc | Near | |||
MOV | AX, 0 | ; Обнуление накопителя | |||
MOV | DX, AX | ||||
M1: | ADD | AX, [SI] | ; Прибавление элемента | ||
; к накопителю | |||||
ADC | DX, 0 | ; Подбор переноса | |||
ADD | SI, 2 | ; Модификация адреса | |||
LOOP | M1 | ; Все элементы – ? ; Переход, если нет | |||
MOV | [DI], AX | ; Запись результата | |||
MOV | [DI + 2], DX | ||||
Summ | Endp | ||||
; Макроуровень программы | |||||
Start: | MOV | AX, Data | ; Системная подготовка: | ||
MOV | DS, AX | ; Загрузка сегментных | |||
MOV | AX, Stack | ; регистров | |||
MOV | SS, AX | ||||
LEA | SP, Top | ; и указателя стека | |||
LEA | SI, Arr1 | ; Передача параметров | |||
LEA | DI, Sum1 | ; для обработки 1-го | |||
MOV | CX, length Arr1 | ; массива | |||
CALL | Summ | ; Обработка массива | |||
LEA | Si, Arr2 | ; Передача параметров | |||
LEA | Di, Sum2 | ; для обработки 2-го | |||
MOV | CX, length Arr2 | ; массива | |||
CALL | Summ | ; Обработка массива | |||
Code | Ends | ||||
End | Start | ||||
Решение задачи 2.
Из условия задачи следует, что разрабатываемая макрокоманда должна обрабатывать два массива. Следовательно, она должна работать с передачей параметров. Передача параметров в макрокоманды всегда осуществляется в текстовой форме при макровызове.
Поскольку вычислительная сущность задачи 2 совпадает с сущностью задачи 1, то все соображения по представлению данных, рассмотренные при решении задачи 1, остаются неизменными.
Алгоритмы макроуровня и макрокоманды для решения задачи 2 представлены на рис. 5.2.
Исходный текст для решения задачи 2 запишем сразу по полной форме.
Name | Word Summ | |||
Data | Segment | |||
Arr1 | DW | 100 DUР(?) | ; Описание 1-го массива | |
Arr2 | DW | 200 DUР(?) | ; Описание 2-го массива | |
Sum1 | DD | ? | ; Описание 1-го результата | |
Sum2 | DD | ? | ; Описание 2-го результата | |
Data | Ends | |||
Code | Segment | |||
Assume | CS:Code, DS:Data | |||
; Описание макрокоманды | ||||
Summ | Macro | Arr, Sum | ||
Local | M1 | ; Локализация меток | ||
LEA | Si, Arr | ; Загрузка начального | ||
MOV | CX, length Arr | ; адреса и счетчика циклов | ||
MOV | AX, 0 | ; Обнуление накопителя | ||
MOV | DX, AX | |||
M1: | ADD | AX, [Si] | ; Прибавление элемента | |
; к накопителю | ||||
ADC | DX, 0 | ; Подбор переноса | ||
ADD | SI, Type Arr | ; Модификация адреса |
Рис. 5.2. Алгоритм решения задачи 2
а) алгоритм макроуровня; б) алгоритм макрокоманды
LOOP | M1 | ; Все элементы – ? Переход, ; если нет | ||
MOV | Word ptr Sum, AX | ; Запись результата | ||
MOV | Word ptr Sum + 2, DX | |||
Endm | ||||
; Макроуровень программы | ||||
Start: | MOV | AX, Data | ; Системная подготовка | |
MOV | DS, AX | |||
Summ | Arr1, Sum1 | ; Макровызов для ; обработки 1-го массива | ||
Summ | Arr2, Sum2 | ; Макровызов для ; обработки 2-го массива | ||
Code | Ends | |||
End | Start |