Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.008 с.) |