Математические операции

9-11-2013, 18:21
Просмотров: 2372
Система команд микроконтроллеров PIC содержит две важные операции: сложение и вычитание. Они могут быть использованы для выполнения других операций, таких как умножение и деление. Люди обычно работают в десятичной системе счисления, поэтому используемые ими алгоритмы умножения и деления основаны именно на этой системе.
Математические операции

Логические же системы основаны на двоичном счислении, поэтому естественно, что в компьютерах операции умножения и деления - также двоичные.
Умножение на два - это просто сдвиг двоичного числа влево ца ОДИН разряд. Например, двоичное 00010011 соответствует десятичному 19. Если это двоичное число сдвинуть на один разряд влево, то оно превратится в 00100110. Младший разряд в этом случае заполняется нулем Полученное значение теперь соответствует десятичному 38, т.е. удвоенным исходным числом.
Сдвиг разрядов влево выполняется командой rlf. Младший разряд заполняется разрядом переноса (STATUSO). При использовании команды rlf для умножения разряд переноса следует предварительно обнулить.
Старший разряд сдвигается в разряд переноса. В рассмотренном выше примере это был 0, так что при циклическом сдвиге ничего не было потеряно. Если мы знаем заранее, что этот разряд никогда не может быть в состоянии 1, то умножение на два - это просто вопрос обнуления разряда переноса и однократного циклического сдвига влево. Если же старший разряд содержит 1, то это должно учитываться путем перемещения его в регистр, содержащий старший байт двухбайтной переменной.

Двухбайтная переменная может сохраняться в двух регистрах: valh и vail. Начните с обнуления этих двух регистров, а также - разряда переноса, после чего поместите умножаемое значение в переменную vail.
Умножение на другое значение просто реализовать, если множитель представляет собой степень двух. Например, для того, чтобы умножить число на восемь, необходимо выполнить рассмотренный выше алгоритм три раза. Умножение на значение, которое не является степенью двух, происходит поэтапно.
Подпрограмма для умножения однобайтного значения vail на значение второго байта (множитель). В этом примере мы умножаем 3lh на 12h, чтобы получить 372h.
Подпрограмма возвращает результат в переменной count. Результат округляется в сторону уменьшения или увеличения до ближайшего целого числа.
Операторы "больше, чем" (>) и "меньше, чем" (= ("больше чем или равно") необходимо считывать только разряд переноса. Аналогичным образом, если значение а помещено в w, и используется команда sublw, то можно сравнивать а с фиксированным значением
Источник: delete-it.ru
Автор: ziko
Опубликовано пользователем: 81 (смотреть все)
Комментарии: