Лабораторная работа № 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 (проверка на равенство)
Число        
Маска        
Результат        

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

Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр 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

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

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

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

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

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

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

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

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

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

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

XORWF IND_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 Форма В
  - - -    
    24h D ‘11’    
    25h D ‘13’    
    26h D ‘15’    
    27h D ‘17’    
Сдвигая регистр SREDNEE вправо, делим 56 на 2    
Сдвигая регистр SREDNEE еще раз вправо, делим на 4.    

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

Вариант Значение первого регистра Адреса регистров массива Вариант Значение первого регистра Адреса регистров массива
  D’21’ 21h – 24h   D’26’ 26h – 29h
  D’22’ 22h – 25h   D’27’ 27h – 30h
  D’23’ 23h - 26h   D’28’ 28h – 31h
  D’24’ 24h - 27h   D’29’ 29h – 32h
  D’25’ 25h - 28h   D’30’ 30h – 33h
П р и м е ч а н и е – Шаг заполнения массива примите равным двум.

 

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

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

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

2 Поясните команду условного перехода BTFSS STATUS, 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.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-28; просмотров: 196; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.147.87 (0.011 с.)