При работе с массивами обязательно проверять длину массива на нуль(«пустой» массив)




Задания к лабораторным работам по курсу

«Микропроцессорные средства систем автоматизации»

 

Составитель: Иоффе В.Г.

 

 

Самара 2011

 

ВНИМАНИЕ! Все задания оформить как подпрограммы.

Параметры подпрограмм хранить в свободной зоне резидентной памяти данных

При работе с массивами обязательно проверять длину массива на нуль(«пустой» массив)

1.Массив из N 16-разрядных чисел,находящихся во внешнем ОЗУ, рассортировать по знаковому разряду. Положительные числа поместить в одну область памяти, а отрицательные - в другую. Первые элементы массива должны содержать его размер.

 

2. Произвести сравнение двух 16-разрядных кодов, находящихся во внешнем ОЗУ, и сформировать признаки результата (0-числа равны, 1- первое число больше, 2- второе число больше). В качестве регистра признака можно выбрать любой из РОНов.

 

3. Выполнить операцию вычитания 16-разрядных чисел, находящихся во внешнем ОЗУ, и сформировать признаки результата (0- результат равен 0, 1- результат отрицательный, 2- результат положительный, 3- арифметическое переполнение). В качестве регистра признаков можно использовать любой РОН.

 

4.Преобразовать двухбайтовые двоичные данные, находящиеся во внешнем ОЗУ, в двоично-десятичный код.Один из способов состоит в последовательном вычитании двоичных эквивалентов десятичных чисел 10000, 1000, 100, 10 и подсчета числа соответствующих разрядов. Константы оформить в виде таблицы,, хранящейся в резидентной памяти программ РПП. Результат поместить в резидентную память данных РПД.

 

5.Преобразовать четырехразрядный двоично-десятичный код, находящийся во внешнем ОЗУ, в двоичный. Один из способов преобразования состоит в последовательном сложении двоичных эквивалентов десятичных чисел 10000, 1000, 100, 10 в соответствии со значением двоично-десятичных разрядов. Константы оформить в виде таблицы, хранящейся в резидентной памяти программ РПП. Результат поместить в РПД.

 

6.Вычислить средне-арифметическое N 16-разрядных кодов, находящихся в последовательных ячейках внешнего ОЗУ. N задается из ряда 2,4,8,16,... В процессе суммирования контролировать перенос из старшего разряда при вычислении окончательного результата. Результат поместить в РПД.

 

7.В массиве, состоящим из N 16-разрядных кодов, определить минимальный элемент и зафиксировать его адрес. Массив находится во внешнем ОЗУ.Минимальный элемент и его адрес сохранить в РПД.

 

8. Из 16-разрядного массива, находящегося во внешнем ОЗУ, выбрать элементы, отвечающие условию Ni< Nдоп, и сформировать новый массив. В начале массива указать его длину. Nдоп хранится в фиксированной ячейке памяти команд.

 

9. Выполнить операцию арифметического правого сдвига N-байтового числа на К разрядов. Исходные данные хранятся в внешнем ОЗУ, результат записывается во внешнее ОЗУ. Длина числа и количество сдвигов не более 255.

 

10. Выполнить операцию сложения двух массивов, находящихся во внешнем ОЗУ. Элемент массива представляет собой четырехразрядный двоично-десятичный код. Адреса массивов - произвольные, длина- не более 255. При сложении контролировать переполнение и в случае его возникновения результат не фиксировать. Подсчитать число элементов и поместить его в начало результирующего массива.

 

11. Выполнить операцию вычитания двух массивов, находящихся во внешнем ОЗУ. Элемент массива представляет собой четырехразрядный двоично-десятичный код. Адреса массивов- произвольные, длина- не более 255. Подсчитать число элементов и поместить его в начало результирующего массива. Вычитание выполняется путем сложения уменьшаемого с дополнительным кодом вычитаемого. Дополнительный код образуется 99h - (вычитаемое)+1.В процессе вычитания контролировать, чтобы (вычитаемое)≤(уменьшаемого). В противном случае в соответствующей строке записать код 0FFFFh.

 

12.Вычислить поэлементно средне-арифметическое двух массивов 16-разрядных кодов, расположенных во внешнем ОЗУ. Длина массива- не более 255. Необходимо учесть, что в результате сложения возможно переполнение.

 

13.В массиве, хранящемся во внешнем ОЗУ и состоящим из N 16-разрядных кодов, определить максимальный элемент и зафиксировать его адрес. Эти данные поместить в РПД

 

14. Выполнить операцию арифметического левого сдвига N-байтового числа на К разрядов. Исходные данные и результат должны хранится во внешнем ОЗУ. Длина числа и количество сдвигов не более 255. При сдвиге контролировать значение знакового и старшего разрядов. Если они не равны, сформировать признак арифметического переполнения и сдвиг прекратить.

 

15. Выполнить операцию логического правого сдвига N-байтового числа на К разрядов. Исходные данные хранятся в ОЗУ, результат записывается в ОЗУ. Длина числа и количество сдвигов задается байтом.

 

16. Выполнить операцию логического левого сдвига N-байтового числа на К разрядов. Исходные данные хранятся в ОЗУ, результат записывается в ОЗУ. Длина числа и количество сдвигов задается байтом.

 

17. Выполнить операцию суммирования 16-разрядных чисел, находящихся в ОЗУ, и сформировать признаки результата (0- результат равен 0, 1- результат отрицательный, 2- результат положительный, 3- арифметическое переполнение). В качестве регистра признаков можно использовать любой РОН.

 

18. Выполнить процедуру нормализации числа с плавающей запятой, находящегося в ОЗУ. Число состоит из трех байт: первый байт- характеристика, второй- ст.байт мантиссы, третий- мл.байт мантиссы. Мантисса представлена в дополнительном коде.

Нормализация состоит в сдвиге мантиссы влево до появления первого значащего бита с одновременной коррекцией характеристики. Для положительного числа значение бита-1, для отрицательного- 0. В целях повышения точности после этого может выполняться дополнительный сдвиг с коррекцией характеристики (формирование "скрытого" разряда).

 

19. Выполнить процедуру выравнивания порядка чисел с плавающей запятой, находящихся в ОЗУ. Числа состоят из трех байт: первый байт- характеристика, второй- ст.байт мантиссы, третий- мл.байт мантиссы. Мантисса представлена в дополнительном коде.

Выравнивание порядка состоит в сравнении характеристик и сдвиге вправо числа с меньшим порядком на число разрядов, равное разности порядков.

 

 

20.Переслать массив из одной области внешней памяти в другую. Размер массива- менее 256. В процессе пересылки контролировать "пустой" массив и возможность "перекрытия" исходного массива и конечного. Если области не перекрываются, то выполняется просто пересылка. Если области совпадают, то операция закончена. При перекрытии массивов необходимо контролировать их начальные адреса. Если адрес исходного массива меньше, то пересылку следует начинать с этого адреса. Если адрес исходного массива больше, то пересылку следует начинать с конца массива.

 

22.Выполнить операцию умножения целых беззнаковых чисел 16*16.

а) Использовать программную реализацию алгоритма: сдвиг множителя, если выдвигаемый разряд равен 1, то суммирование множимого с суммой частичного произведения и сдвиг суммы. Если разряд равен 0, то сдвиг частичного произведения.

б) Использовать алгоритм на основе команды MUL.

 

23.Выполнить преобразование целого 16- разрядного числа с фиксированной запятой в трехбайтовый формат с плавающей запятой:

 

характеристика Ст. байт мантиссы Мл. байт мантиссы

Числа хранятся в ОЗУ.

 

24.Выполнить операцию сравнения двух 16-разрядных массивов находящихся в ОЗУ. Подсчитать число элементов равных, больше, меньше элементов первого массива. Сформировать результат операции в РПД в виде последовательности этих чисел.

 

25. Написать подпрограмму определения максимума/минимума 16-разрядного массива, расположенного в ОЗУ. Параметры подпрограммы: тип поиска, длина массива, начальный адрес массива, адрес максимума/минимума.

 

26.Выполнить преобразование двоичного кода в семисегментный: преобразовать двоичный код в двоично-десятичный путем последовательного вычитания 100, 10 (или деления), а затем преобразовать двоично-десятичный код в семисегментный с помощью таблицы. Исходные данные и результат преобразования находятся во внешнем ОЗУ.

 

27.Установить заданный разряд 2-байтового слова в 1 или 0. Исходными данными являются адрес слова и команда, расположенные во внешнем ОЗУ. Формат команды: 0 разряд - значение бита, 1-4 разряды - номер бита.

 

28.Проверить значение заданного разряда 2-байтового слова. Исходными данными являются адрес слова и команда, расположенные в ОЗУ. Формат команды: 0 разряд - значение проверяемого бита, 1-4 разряды - номер проверяемого бита. По результатам

проверки установить бит в битовой зоне РПД, если разряды равны, или сбросить, если разряды не равны.

 

29.Выполнить медианную отбраковку 16-разрядного массива, хранящегося в ВОЗУ, длина массива –N. Алгоритм: ранжирование массива по возрастанию или убыванию, определение серединного элемента, вычисление в районе середины средне-арифметического К значений(К= степени двойки).

 

30.Выполнить подпрограмму «скользящее среднее»:определяется средне-арифметическое первых двух значений, затем средне-арифметическое полученного значения и следующего текущего и так далее. Массив хранится во ВЗУ, разрядность данных 16 бит.

 

31. Выполнить умножение 16*16, используя команду умножения 8051

(AhAl)*(BhBl)= Al*Bl + (Ah*Bl + Bh*Al) shl8 + (Ah*Bh) shl16

Операнды хранятся во ВЗУ.

 

32.Выполнить сложение чисел с плавающей запятой на основе заданий 18, 19.

 

33. В 16-разрядном массиве, находящемся во ВЗУ, найти адреса заданного слова и подсчитать их количество. Исходные данные(значение слова, начальный адрес массива и длина массива) хранятся в фиксированных ячейках резидентной памяти. Если слово не найдено, сформировать признак результата.

 

34. Реализовать поиск последовательности кодов в 16-разрядном массиве. Заданы два массива А и В, причем длина массива А больше длины массива В. Необходимо определить местоположение копии массива В в массиве А, если она имеется. Исходные данные: начальные адреса массивов и их длины.

Выход – начальный адрес копии или признак, что копия не найдена. Необходимо проверить корректность исходных данных. Массивы хранятся во внешнем ОЗУ

 

35.Из исходного массива получить два новых, поместив в первый из них значения элементов, превосходящих средне-арифметическое значение массива, а во второй - номера этих элементов. Массив – 16-разрядный, находится во ВЗУ. Параметры подпрограммы: начальный адрес исходного массива и его длина, адреса первого и второго массива и их длины. Длины массивов кратны степени 2.

 

36.Из исходного массива получить два новых, поместив в первый из них нечётные значения элементов массива,; а во второй - их номера.

 

37.Из исходного массива сформировать массив отклонений от средне-арифметического значения и массив номеров элементов исходного, превышающих средне-арифметическое значение. Исходный массив – 16-разрядный, находится во ВЗУ.

Длина исходного массива кратны степени 2.

 

38.Из исходного массива получить два новых,;поместив в первый из них номера элементов превышающих А, а во второй- их значения Исходный массив – 16-разрядный, находится во ВЗУ.

 

39.Из двух исходных массивов X и Y cформировать массив Z, поместив в него все элементы исходных, превышающие общее средне-арифметическое. Общее количество элементов массивов Х и Y кратно степени 2. Исходный массив – 16-разрядный, находится во ВЗУ.

 

40.Выявить все номера элементов массива X, превышающих (max+min)/2. Результат: массив номеров и массив элементов (значений), для которых выполняется заданное условие. Исходный массив – 16-разрядный, находится во ВЗУ.

 

41.Получить из исходного массива два новых, поместив в них элементы и номера,

для которых выполняется условие x(i)>=x(max)-x(min). Исходный массив – 16-разрядный, находится во ВЗУ.

 

42. Из массива ASCII кодов выбрать коды, соответствующие десятичным цифрам, преобразовать их в упакованный байтовый формат и формировать из них новый массив, упорядоченный по возрастанию. Последний элемент массива должен содержать его длину. Если число цифр будет нечетное, последний элемент дополнить нулями в младшей тетраде. Если цифры отсутствуют, сформировать признак результата. Исходный массив находится во ВЗУ.

 

44.Из массива кодов выделить сообщение, начинающееся с символа %, а заканчивающееся символом «return»(000Dh). Структура сообщения: адрес (1 байт), данные (4байта), контрольная сумма (1 байт). Исходный массив ASCII кодов расположен во внешнем ОЗУ. Длина массива не более 255. Параметрами подпрограммы являются: начальный адрес массива, его длина, адрес, хранящейся в фиксированной ячейке РПД. Если сообщение с заданным адресом обнаружено, подсчитать контрольную сумму и сравнить с контрольной суммой сообщения. Если сообщение не обнаружено, сформировать признак результата ERRА в фиксированной области РПД. При неравенстве контрольных сумм- сформировать признак ERRS. Контрольная сумма определяется путем суммирования полей адреса и данных без учета переполнения разрядной сетки.

 

43. В 16-разрядном массиве, расположенном во внешнем ОЗУ, выбрать 8 максимальных элементов и определить их средне-арифметическое.

 

44.Преобразовать 16-разрядный массив, находящийся во внешнем ОЗУ, в массив ASCII-кодов. Параметры подпрограммы (начальный адрес и длина) находятся в РПД

 

45. Преобразовать массив ASCII-кодов, находящийся во внешнем ОЗУ, в упакованные 16-ричные данные. Параметры подпрограммы (начальный адрес и длина) находятся в РПД

 

46. В 16-разрядный массив, расположенный во внешнем ОЗУ, начиная с фиксированного адреса, вставить содержимое области памяти, не принадлежащее этому массиву. При этом содержимое исходного массива должно быть сохранено. Исходные данные: адреса массивов и их длина, адрес, с которого массив должен быть вставлен.

 

47. Выполнить операцию умножения двух байтовых массивов, один из которых расположен в памяти программ, а другой – во внешнем ОЗУ. Результат записать во внешнее ОЗУ. Подсчитать число элементов результирующего массива, у которых значение ≥255.

 

48.Из 16-разрядного массива, расположенного во внешнем ОЗУ, выбрать элементы, отвечающие условию Nmin ≤Ni≤Nmax и сформировать новый массив, подсчитав количество элементов. Константы хранятся в резидентной памяти программ.

 

49. Выполнить преобразование 16-разрядного двоичного числа в двоично-десятичное, используя схему Горнера:

, где

-значение соответствующего разряда двоичного числа.

Суммирование и умножения должны выполняться по правилам двоично-десятичной арифметики: при суммировании использовать команду коррекции DAA, а умножение на 2–суммирование числа с самим собой.

 

50..Выполнить преобразование n-байтового двоично-десятичного числа в семисегментный код. Коды хранятся в упакованном формате во внешнем ОЗУ. Массив семисегментных кодов записать в РПД.

Преобразование двоично-десятичного кода в семисегментный выполнить с помощью таблицы, хранящейся в памяти команд. Семисегментный код формируется для отображения информации на 7-сементных индикаторах (см. рисунок)

Кодируется байтом

h g f e d c b a

7 6 5 4 3 2 1 0

Например, 0 – 3Fh, 9 – 6Fh

Исходные данные: начальные адреса таблиц и длина исходной таблицы, для 8051 n= 0- 16.

 

Добавить кусочно-линейную интерполяцию, схему Горнера, вычисление обратной функции.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: