Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №4. Умножение на дробное Число
Цель работы: изучить алгоритмы выполнения умножения и деления. Научиться сравнивать числа, изучить инструкции условных переходов BTFSC и BTFSS и применение их для ветвления. Инструкции условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата, пропускают или не пропускают следующую инструкцию программы. Инструкция BTFSC пропускает следующую инструкцию, если заданный бит сброшен. Т а б л и ц а 4.1 Использование битов CARRY (C) и ZERO (Z).
В реальных программах вместо указанных инструкций пишутся инструкции, соответствующих разработанному алгоритму. В ассемблере отсутствуют инструкции сравнения чисел. Чтобы определить, какое из чисел больше (меньше), применяют такой алгоритм: 1. Выполняют вычитание чисел. При этом в зависимости от результата, устанавливаются флаги C и Z регистра Status, см. таблицу 4.2. 2. Далее применяют инструкции условных переходов. Т а б л и ц а 4.2 – Регистрация событий в регистре Status
Умножение можно выполнить последовательным сложением. Например, 25*10=25+25+25+25+25+25+25+25+25+25=250. Алгоритм целочисленного деления показан в таблице 4.3. Из алгоритма видно, что, если делитель равен нулю, то программа зациклится.
Таблица 4.3 - Алгоритм целочисленного деления
Умножение на дробное число можно выполнить с точностью до целых с помощью умножения заданного числа на целое число (множитель), и затем деления результата на другое целое число (делитель). Множитель и делитель подбираются на калькуляторе или MSExcel. Пример. Выполним умножение числа 6 на 0,8. Сначала на калькуляторе подберем целочисленный множитель и целочисленный делитель, таким образом, чтобы получить примерно заданный коэффициент. В данном случае подходят множитель 4 и делитель 5, поскольку 4/5=0,8. Далее умножаем заданное число на четыре, и затем результат делим на пять. Остаток будет определять погрешность проведенных вычислений. Оформим умножение и деление в виде подпрограмм, которые будем применять в дальнейшем. Фрагменты программы. Примененные РОН показаны на рисунке 4.2. Стандартная настройка МК опущена. Исполняемая часть программы. CLRF PORTC; записать в PORTC нули (потушить светодиоды). CLRF Delitel; очищаем делитель. ; умножаем 6*0,8=6*4/5=4(4) MOVLW D'6' MOVWF Chislo; заданное число MOVWF Umn_Chislo; умножаемое число равно заданному числу. MOVLW D'4' MOVWF Mnozh; множитель. MOVLW D'5' CALL Umnozhenie ; подготовка к делению. Movf Pr, W; значение Pr получено в подпрограмме Umnozhenie. Movwf Delimoe Movlw D'5' movwf Delitel; если не дать значение будет деление на ноль. CALL Delenie Goto$ Umnozhenie; подпрограмма. Входы Umn_Chislo и Mnozh, выход Pr. Clrf Pr Clrf Kol_slag Sled_slag Movf Pr, W Addwf Umn_Chislo, W; добавление очередного слагаемого. Movwf Pr Incf Kol_slag, F; отмечаем количество слагаемых. MOVF Kol_slag, W XORWF Mnozh, F; маскированием проверяем Kol_slag=Mnozh. Btfss STATUS, Z Goto Sled_slag RETURN Delenie; подпрограмма. Входы Delimoe и Delitel, выходы Chastnoe и Ostatok. CLRF Chastnoe Movf Delimoe, W; MOVWF Rab_peg; записали Delimoe в рабочий регистр. MOVF Delitel, W BTFSC STATUS, Z; защита от деления на нуль.
GOTO NUL; только при Z=1. Metka INCF Chastnoe, F; накапливаем частное. SUBWF Rab_peg, F; вычитаем Rab_peg=Rab_peg-Delitel. BTFSC STATUS, C; проверяем разность отрицательная? GOTO Metka; выполняется только при C=1. ; Возврат на один шаг. DECF Chastnoe, F; восстанавливаем частное. ADDWF Rab_peg, W; восстанавливаем Rab_peg. MOVWF Ostatok; получаем остаток. RETURN NUL MOVLW D'255'; защита от деления на ноль. MOVWF PORTC; сигнализируем о зацикливании программы. END Блок-схема программы представлена на рисунке 4.1. Выполните умножение по таблице 4.5, результаты - в таблицу 4.4. Рекомендация. Сохраните программу умножения на дробное число в моих документах, она будет применяться в следующих работах.
Таблица 4.4 Вариант 11. Результаты умножения на 0,8.
Таблица 4.5– Варианты заданий умножения числа на дробный коэффициент
Контрольные вопросы. 1 Поясните команду условного перехода BTFSC STATUS, C. 2 Поясните команду условного перехода DECFSZ R3, F. 3 Расскажите об алгоритме умножения на целое число. 4 Какой логической операцией можно определить равенство чисел? 5 Расскажите об алгоритме деления на целое число. 6 Расскажите об алгоритме умножения на дробное число. 7 Как контролируется отрицательный результат вычитания? 8 Как контролируется нулевой результат вычитания? 9 Какой результат будет при умножении 26 на 10 в регистре МК? 10 Умножить 4 на 0,8 можно двумя способами: 4*4/5 или 4/5*4. Будут ли результаты одинаковы? 11 Поясните инструкцию условного перехода BTFSS STATUS, Z. 12 Как можно определить равенство чисел? 13 Когда флаги Z и C регистра Status одновременно равны нулю? 14 Как определить более мощную установку из двух потребителей? 15 Как выполняется сравнение чисел?
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-28; просмотров: 163; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.59.231 (0.011 с.) |