ВЫПОЛНЕНИЕ КОНТРОЛЬНОЙ РАБОТЫ

Контрольная работа предусмотрена учебным планом в качестве формы промежуточного контроля при освоении студентами теоретического материала. Оценка за контрольную работу может учитываться в итоговой оценке по дисциплине.

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