Можно ли выполнить умножение без знака с помощью множителя со знаком?

avatar
Gabbed
8 августа 2021 в 19:09
107
0
0

Например, RISC-V ISA определяет четыре различных инструкции умножения:

  • MUL: подписанный x подписанный
  • MULH: подписанный x подписанный
  • МУЛХУ: без знака x без знака
  • MULHSU: подписанный x беззнаковый

Мой вопрос: возможно ли повторно использовать один множитель со знаком для выполнения всех вышеперечисленных инструкций? Или наоборот (используя беззнаковый множитель).

Источник
Dave S
8 августа 2021 в 19:12
1

Вероятно, но только с такими ограничениями, как если все числа положительные и не используют старший бит, а результат не переполняется старшим битом при использовании знака. Вы просите нас доказать что-то конкретное для вас?

Gabbed
8 августа 2021 в 19:26
0

@DaveS Спасибо, я пытался реализовать небольшой процессор в FPGA с помощью Vivado, и я не знал, нужно ли мне использовать 3 разных множителя (со знаком x со знаком, без знака x без знака, со знаком x без знака) или один. Насколько я понял, мне нужно использовать 3 разных блока умножения. (это правильно?)

Dave S
9 августа 2021 в 16:52
1

Рассмотрим -1 x 10. Будет переполнение, если вы будете рассматривать оба как unsigned x unsigned. Да, вы могли бы использовать 3 блока вместо 4, если вы всегда можете настроить порядок, чтобы он (подписанный x беззнаковый) никогда (беззнаковый x подписанный). Я не разработчик ЦП, но мне интересно, не обманывает ли дизайн RISC один блок (s x u) плюс более простой блок (u x s), который просто переворачивает входные данные, а затем подает их в первый блок?

Ответы (0)