Куда PMP20 кладёт результат 32-разрядного умножения?

Проверено экспертом Опубликовано: 09.05.2025 1566 просмотров Помогло 91%

Умножение двух 32-разрядных чисел даёт 64-разрядный результат, и контроллер размещает его в четырёх подряд идущих регистрах. Команда, записанная как DMUL D0 D2 D10, займёт регистры D10, D11, D12 и D13 — а не два, как ожидают при переносе программы с 16-разрядной арифметики.

Что из этого следует:

  • Планируйте адреса с запасом. Если сразу за приёмником результата в программе используется другой регистр, он будет затёрт молча, без всякой ошибки. Такие дефекты ищут долго: сбоит не умножение, а совсем другая часть логики.
  • Читайте результат правильно. Двухсловная команда пересылки возьмёт только младшую половину результата — этого достаточно, пока произведение укладывается в 32 разряда. Для больших значений придётся работать со всеми четырьмя словами.
  • Проверяйте необходимость 64 разрядов. В большинстве технологических расчётов — пересчёт импульсов в метры, расход в объём — множители заведомо укладываются в 32 разряда, и достаточно обычного умножения с контролем переполнения.

Общее правило для арифметики контроллера: после операции проверяйте признаки результата — нулевой результат, заём и перенос — и признак ошибки вычисления. Код ошибки лежит в системном регистре: единица означает деление на ноль, четвёрка — ошибку в двоично-десятичном коде.

Типовой приём для расчётов с масштабированием: сначала умножение, потом деление, а не наоборот. Такой порядок сохраняет точность, и как раз в нём промежуточный результат легко выходит за 32 разряда — тогда четыре регистра под произведение оказываются не запасом, а необходимостью.

Прикреплённая документация

Георгий Жуков Георгий Жуков Ведущий инженер

Этот ответ был полезен?

Не нашли ответ?

Инженер сервисной службы ответит на почту. Вопросы, которые повторяются, мы публикуем в базе знаний — без ваших контактов.

Вопрос из раздела Куда PMP20 кладёт результат 32-разрядного умножения?