Каков правильный синтаксис инструкции MIPS sll?

Должна ли величина сдвига быть непосредственным значением или значением, хранящимся в регистре? Оба работают?

У меня были разные сайты, рассказывающие мне разные вещи, и я запутался.

На основании моих исследований команда sll (сдвиг влево) должна использоваться следующим образом:

  sll $d, $t, h

Что заставляет $d = $t смещаться влево h раз.

Мне сказали, что h должно быть непосредственным значением, но мне было интересно, можно ли использовать регистр в качестве третьего аргумента, а значение внутри этого регистра использовать в качестве величины сдвига. Будет ли это работать?

2 ответа

Решение

Ты прав.

sll Конкретно, это инструкция R-формата, в которой используются только два регистра: rd и rs (назначение и источник), а поле shamt является непосредственным значением (константой).

Есть другая инструкция sllv который использует третий регистр, где вы указываете смещение по переменной (регистр).

Позвольте мне пояснить, что смещение влево логически в 32-битном MIPS имеет следующий синтаксис:

Пункт назначения SLL, Цель, Сумма смены (Должно быть немедленным значением)

Где, как в 8086 году, если мы хотим, чтобы величина сдвига была больше 1, мы должны использовать регистр для хранения значения суммы сдвига!

Другие вопросы по тегам