Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие. MS Word.doc
Скачиваний:
40
Добавлен:
02.05.2014
Размер:
1.05 Mб
Скачать

Программирование арифметических операций

При сложении и вычитании проблем не возникает, только надо учитывать бит переноса. При наличии команды умножения произведение получается аналогично умножению в столбик (умножается байт на байт).

Пример:

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

Множимое , множитель.

Сумма kпервых или последних частичных произведений – этоk-ая сумма частичных произведений. Приk=nполучаем полное произведение. Длина произведения есть сумма длин множимого и множителя.

Алгоритм:

  1. анализируется очередной бит множителя;

  2. в зависимости от его значения происходит прибавление множимого к предыдущей сумме частичных произведений;

  3. производится изменение взаимного положения множимого Х и суммы частичных произведений с учётом веса .

В соответствии с выражением (1) существует 4 возможных варианта умножения, зависящих от того, с каких разрядов множителя начинается умножение и что сдвигается: множимое или сумма частичных произведений.

11.10.2000

В kразрядности выше 8 существуют отдельные команды для знакового и беззнакового умножения:

MUL (unsigned MULtiplication);

IMUL (sIgned MULtiplication).

Сдвиг суммы частичных произведений старшими разрядами вперёд (для PIC):

Операция целочисленного деления является обратной по отношению к умножению. Принято, как дополнительный результат, формировать остаток . Рассмотрим две разновидности деления: делимое, делитель и частное имеют одну длину; делимое имеет двойную длину по сравнению с делителем и частным (возможно переполнение, когда старшая половина делимого больше делителя). Деление сводится к последовательности вычитаний делителя из делимого, а затем из остатка. Тогдачастного определяется так: если текущий остатокделителю – цифра частного 1 иначе 0.

  1. анализ некорректной ситуации;

  2. начальный остаток равен делимому;

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

  4. если , тои необходимо вернуться к, если, тои за очередной остаток принимается;

  5. коррекция взаимного положения остатка и делителя (переход к 3 или на конец алгоритма).

Частное определяется со сдвигом делителя вправо или со сдвигом остатка (делимого) влево.

Т.к. вычитание (сравнение) происходит побайтно, то необходимо выровнять границы старших байт. При этом младший разряд может быть потерян. Для частного и остатка необходимо иметь по 2 байта. Чтобы частное побитно замещало Х, можно справа добавить один байт, условно считая его младше младшего.

0000rrrr rrrrrrrr rrrrrrrr r0000000

Затем в каждом цикле будут сравниваться старшие два байта остатка с делителем. В зависимости от результата в самый младший бит сдвигом будет записываться 0 или 1.

000000rr чччччччч 000000zz zzzzzzzz

000000цц цццццццц

Программная реализация зависит от того, как возвращаются к : восстановлением остатка (сложение с У), запоминанием нового результата во временных регистрах или использование дополнительного регистра с переключением.

Программа для 51 с использованием дополнительного регистра В:

16.10.2000

Этот вариант проходит, если делитель не кратен 8. Когда делитель кратен 8 битам, то учитывается бит переноса после сдвига остатка влево. Т.е. сначала выполняется сдвиг, анализируется бит переноса и только затем производится сравнение.

Пример: деление 16 разрядов на 8.

Для экономии времени выполнения операций иногда отказываются от использования цикла.

Пример: 15/78.7

Соседние файлы в предмете Микропроцессорные системы