Задание 2. Обработка массива.

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 34

ОТЧЕТ 

 

ПРЕПОДАВАТЕЛЬ

старший преподаватель       К. А. Жиданов
должность, уч. степень, звание   подпись, дата   инициалы, фамилия

 

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №1
по курсу: ИНФОРМАТИКА
 
 

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. № 3045       Р.А.Бочкарёв
      подпись, дата   инициалы, фамилия

 

Санкт-Петербург, 2020

Оглавление

Задание 1. Обработка массива. 3

Задание 2. Обработка массива. 5

Вывод. 8

Приложение 1. 8

Приложение 2. 9

 


Цель работы

Изучить способы обработки массивов (векторов). Изучить способы адресации x86 для работы с массивами.

Ход работы:

1. Выбрать индивидуальный вариант задания в соответствии со списком;

2. Разработать алгоритм решения задачи;

3. Предложить, как минимум три тестовых набора входных данных;

4. Составить трассировочную таблицу для алгоритма по одному из наборов;

5. Написать на языке ассемблера программу, с учётом разрядности элементов массива;

6. Занести программу в отладчик;

7. Выполнить программу, поочерёдно подавая на вход тестовые наборы, после каждого запуска убеждаясь, что результат работы программы совпадает с ожидаемым;

8. Занести результаты вычислений в отчёт.

Задание 1. Обработка массива

Написать на языке ассемблера программу, реализующую обработку массива. Проверить корректность работы программы с помощью отладчика на заданных значениях. Задание: найти наименьшее четное значение. Разрядность 8 бит.

I. Последовательность выполнения работы:

Для начала работы обнулим все регистры, необходимые для выполнения задания. Так как разрядность массива 8 бит значит максимально допустимые значения, с учётом знака, лежат в диапазоне [-128;127]. Для нахождения самого наименьшего элемента в регистр al необходимо положить самое максимальное число 127.Регистр ebx будет использоваться в качестве переменной с начальным индексом массива, начинающегося с 0.

1. Сравниваем индекс элемента массива с размером массива. Если индекс больше или равен размеру массива – выводим получившийся результат.

2. Проверяем число на четность. Если младший бит равен 0 – число четное. Если младший бит равен 1 – число не четное, продолжаем цикл.

3. Для того, чтобы знать все ли элементы в массиве рассмотрели, необходимо сравнить индекс элемента с размером массива. Если индекс больше или равен размеру массива, то выходим из цикла и выводим получившийся результат.

4. Четное число сравниваем с al, если элемент меньше аl , то заносим значение этого элемента в переменную al. Инкрементируем индекс элемента. Продолжаем цикл.

5. После перебора всех элементов в массиве, в переменной будет находиться наименьшее четное значение. Если значение al осталось 127, значит в массиве нет четных чисел или массив пуст.

Тестирование будет проводиться на трех наборах:

1) 5,14,21,9,6,78

2) -2,64,90,17,21,-18

3) -1,0,-61,-52,-34,-128

 

 

II. Результат работы программы на втором тестовом наборе:

№ строки eax ebx edx
7 ? ? ?
8 ? ? ?
9 0 ? ?
10 0 0 ?
11 0 0 0
12-19 127 0 0
20 254 0 0
21 254 1 0
11-13 254 0 1
14 254 1 1
15 254 1 0
16-20 254 1 0
21 254 2 0
11-13 254 2 0
14 254 2 1
15 254 2 0
16-20 254 2 0
21 254 3 0
11-13 254 3 0
14-20 254 3 1
21 254 4 1
11-20 254 4 1
21 254 5 1
11-14 254 5 1
15-19 254 5 0
20 238 5 0
21 238 6 0
11-12 238 6 0
22 238 6 0

После выполнения программы с первым набором значений, в регистре al содержится число 238 (-18), что совпадает с результатом, вычисленным вручную. Программа работает правильно. (приложение 1)

После выполнения программы со вторым набором значений, в регистре al содержится число 6, что совпадает с результатом, вычисленным вручную. (приложение 1)

После выполнения программы с третьим набором значений, в регистре al содержится число 128 (-128), что совпадает с результатом, вычисленным вручную. (приложение 1)

III. Блок-схема

Рисунок 1. Блок-схема

Задание 2. Обработка массива.

Написать на языке ассемблера программу, реализующую обработку массива. Проверить корректность работы программы с помощью отладчика на заданных значениях. Задание: проверить состоит ли массив из одинаковых элементов. Разрядность 8 бит.

I. Последовательность выполнения работы:

Для того, чтобы проверить состоит ли массив из одинаковых элементов, достаточно будет найти хотя бы два элементы, которые не равны между собой. Если они не равны, значит массив не состоит из одинаковых элементов.

Будем считать, что если массив состоит из одинаковых элементов, то результат будет равен 1. Результат будет хранится в регистре al.

Пусть в регистре ebx хранится индекс массива. Присвоим ему значение 1, чтобы не сравнивать элемент с самим собой. Присваиваем номер второго элемента.

Первый элемент массива кладем в регистр cl.

Для того, чтобы знать все ли элементы в массиве рассмотрели, необходимо сравнивать индекс элемента с размером массива. Если индекс больше или равен размеру массива, то выходим из цикла, выводим получившийся результат.

После того, как проверили, что индекс элемента меньше размера массива, сравниваем значение первого элемента массива с текущим элементом массива. Если они не равны присваиваем al значение 0. Выводим al, делаем вывод, что массив состоит не из одинаковых элементов. В случае равенства первого элемента с текущем, продолжаем цикл, берем следующий элемент.

Тестирование будем проводить на трех наборах данных:

а) 22,22,,22,22

б) 13,13,6,13,13

в) -1,-1,-1

II. Трассировочная таблица для первого набора

№ строки eax ebx ecx
7 ? ? ?
8 ? ? 0
9 0 ? 0
10 1 ? 0
11 1 1 0
12-16 1 1 22
17 1 2 22
12-16 1 2 22
17 1 3 22
12-16 1 3 22
17 1 4 22
12-13 1 4 22
18 1 4 22
19 0 4 22

 

После выполнения программы с первым набором значений, в регистре ecx содержится число 22, что совпадает с результатом, вычисленным вручную. Программа работает правильно. (приложение 2)

После выполнения программы с первым набором значений, в регистре ecx содержится число 13, что совпадает с результатом, вычисленным вручную. (приложение 2)

После выполнения программы с первым набором значений, в регистре ecx содержится число 255 (-1), что совпадает с результатом, вычисленным вручную. (приложение 2)

III. Блок-схема

Рисунок 2. Блок-схема


 

Вывод

Я изучил способы обработки массивов (векторов) и способы адресации x86 для работы с массивами.

Приложение 1.

1) 2)   3)

 

Рисунок 3. Код программы


 

Приложение 2.

1) 2)   3)

 

Рисунок 4. Код программы

 


Дата добавления: 2020-12-22; просмотров: 77; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!