Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ Прог ЦТ лабы для БАУ 2011.doc
Скачиваний:
18
Добавлен:
01.05.2015
Размер:
2.99 Mб
Скачать

2 Лабораторная работа № 2.Маскирование. Суммирование массива

Цель работы: Обучение применения маскирования данных. Создание алгоритма суммирования массива.

При маскировании выполняется побитные логические операции исходного числа и маски с целью одновременного изменения нескольких разрядов исходного числа или проверки равенства чисел:

  • логическая операция ANDисходного числа и числа-маскиочищаетразряд числа в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица;

  • логическая операция ORисходного числа и числа-маскиустанавливаетв разряд исходного числа 1, если в таком же разряде маски будет записана 1, и не изменяет его, если в этом разряде маски записан 0;

  • логическая операция «исключающее ИЛИ» (XOR)исходного числа и числа-маскиинвертируетсодержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. Ине изменяетего, если в этом разряде маски записан 0. Часто применяется для определения равенства регистра какому-либо числу, записанному в маске.

Примеры: инвертирование, не изменяем, равенство.

Число 1001 1001 1001

Маска XOR 1111 XOR 0000 XOR 1001

Результат 0110 1001 0000

Примеры результатов маскирования приведены в таблице 2.1.

Т а б л и ц а 2.1 – Результаты маскирования

Объекты

Операция

OR (установка с 4 по 7 бит)

AND (очистка с 0 по 3 бит)

XOR (инверсия с 4 по 7 бит)

XOR (проверка на равенство)

Число

10101010

10101010

10101010

11011101

Маска

11110000

11110000

11110000

11011101

Результат

11111010

10100000

01011010

00000000

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

Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр FSR,являющимся просто указателем, хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистраINDF.

Задача.В массив записано потребление энергии за четыре месяца. Требуется определить суммарный расход энергии за указанный период и средний расход энергии в месяц.

Фрагменты программы. Применяемые символьные имена регистров показаны на рисунке 2.1. Стандартные операции настройки МК опущены.

Заполнение массива.

movlw D'2'

movwf SHAG

MOVLW D'11'

MOVWF EL_MAS_0

ADDWF SHAG, W; W= EL_MAS_0+SHAG

MOVWF EL_MAS_1

Аналогично заполняются остальные элементы массива.

CLRF SUM

CLRF IND_EL_MAS

MOVLWEL_MAS_0; считываем адрес регистра в аккумулятор.

MOVWF FSR; запись в регистр FSR адреса первого регистра.

NEXT_ELEM; метка для повторения цикла.

MOVF SUM, W; считываем значение регистра SUM в W.

ADDWF INDF, W; сложить W и текущий элемент массива.

MOVWF SUM; запоминаем новое значение SUM.

Подготовка к следующему циклу

INCF FSR, F; записываем в FSR адрес следующего регистра массива.

INCFIND_EL_MAS,F; фиксируем индекс этого регистра.

MOVLWD’4’; количество элементов в массиве.

XORWFIND_EL_MAS,W; маскированием проверяем: индекс равен 4.

BTFSS STATUS, Z; проверка –четыре элемента просуммировали (Z=1)?

GOTO NEXT_ELEM; только при Z=0, повторяем цикл.

; подготовка вычисления среднего значения.

MOVF SUM, W; если Z=1, копируем сумму в аккумуляторW.

MOVWF SREDNEE; копируем SUMв SREDNEE.

; нахождение среднего значения массива выполните самостоятельно.

END

Выполните самостоятельно деление на 4 с помощью сдвигов вправо командой RRF регистраSREDNEEдля определения среднего значения, см. таблицу 2.3. Не забывайте обнулять битCarryперед сдвигом.

Количество повторений в цикле определяется следующим образом, при каждом повторе цикла, увеличиваем индекс элемента в регистре и проверяем, маскированием равен ли он четырем. Поскольку регистр с индексом 4 будет лишним, выходим из цикла. Блок-схема программы приведена на рисунке 2.2. В ней предполагается, что в массив данные занесены.

Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 2.4, выполняющую нахождение среднего указанных регистров. Результаты занесите в таблицу 2.3.

Т а б л и ц а 2.3– Сумма массива и среднее массива

Вариант

Адрес регистра массива, указываемый в FSR

Число в регистре массива

Сумма в регистрах W или SREDNEE

Регистр

Форма h

Форма D

Форма В

-

-

-

00

00000000

11

1

24h

D ‘11’

11

00001011

11

2

25h

D ‘13’

24

00011000

11

3

26h

D ‘15’

39

00100111

11

4

27h

D ‘17’

56

00111000

Сдвигая регистр SREDNEE вправо, делим 56 на 2

28

00011100

Сдвигая регистр SREDNEE еще раз вправо, делим на 4.

14

00001110

Т а б л и ц а 2.4 – Варианты заданий

Вариант

Значение первого регистра

Адреса регистров массива

Вариант

Значение первого регистра

Адреса регистров массива

1

D’21’

21h – 24h

6

D’26’

26h – 29h

2

D’22’

22h – 25h

7

D’27’

27h – 30h

3

D’23’

23h - 26h

8

D’28’

28h – 31h

4

D’24’

24h - 27h

9

D’29’

29h – 32h

5

D’25’

25h - 28h

10

D’30’

30h – 33h

П р и м е ч а н и е – Шаг заполнения массива примите равным двум.

Создайте окно наблюдения для всех регистров в необходимом формате чисел и внесите в отчет по лабораторной работе. Для данной программы необходимые регистры показаны на рисунке 2.1. Чтобы быстро получить данные в окне наблюдения запустите составленную программу в автоматическом режиме. Иногда нужно дополнительно нажать F5 после выполнения программы.

Рисунок 2.1 – Окно наблюдения

Контрольные вопросы

  1. Какие биты Statusменяют свои значения при операциях вычислений?

  2. Поясните команду условного перехода BTFSSSTATUS,Z.

  3. Как можно определить равенство чисел?

  4. Какие способы адресации вы знаете?

  5. Как контролируется в цикле выход за пределы массива?

  6. Назначение регистра FSR.

  7. Назначение регистра INDF.

  8. Как находится среднее четырех регистров?

  9. Зачем очищается регистр SUMперед циклом сложения?

  10. Какое участие принимает бит CрегистраStatus в операции сдвига?

  11. Как очистить нечетные разряды числа?

  12. Какой логической функцией устанавливают в разряды единицы?

  13. Какой логической функцией определяют равенство чисел?

  14. Зачем применяют логическую функцию Исключительно ИЛИ?

  15. Как оставить информацию только в битах 0-3 заданного числа?

  16. Приведите таблицы истинности для AND,OR,XOR.