Как выполнить сдвиг вправо на RISC

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

RISC предлагает только:

ADD 
NOT
NXOR (XOR)
AND (NAND)

так OR а также NOR все могут быть эмулированы несколькими (N)AND а также NOT операции.

1 ответ

Решение

Программа C ниже использует только авторизованные инструкции плюс условные переходы, и она сдвигается input в output на 1

Если инструкция, которую вы пытаетесь эмулировать, это "сдвиг на n", то вам следует начать с c равен 2н.

unsigned int shift_right(unsigned int input) {
  unsigned int d = 1;
  unsigned int output = 0;
  for (unsigned int c = 2; c <= 0x80000000; c += c)
  {
    if (c & input) 
      output |= d;
    d += d;
  }
  return output;
}
Другие вопросы по тегам