Каков правильный синтаксис инструкции MIPS sll?
Должна ли величина сдвига быть непосредственным значением или значением, хранящимся в регистре? Оба работают?
У меня были разные сайты, рассказывающие мне разные вещи, и я запутался.
На основании моих исследований команда sll (сдвиг влево) должна использоваться следующим образом:
sll $d, $t, h
Что заставляет $d = $t смещаться влево h раз.
Мне сказали, что h должно быть непосредственным значением, но мне было интересно, можно ли использовать регистр в качестве третьего аргумента, а значение внутри этого регистра использовать в качестве величины сдвига. Будет ли это работать?
2 ответа
Ты прав.
sll
Конкретно, это инструкция R-формата, в которой используются только два регистра: rd и rs (назначение и источник), а поле shamt является непосредственным значением (константой).
Есть другая инструкция sllv
который использует третий регистр, где вы указываете смещение по переменной (регистр).
Позвольте мне пояснить, что смещение влево логически в 32-битном MIPS имеет следующий синтаксис:
Пункт назначения SLL, Цель, Сумма смены (Должно быть немедленным значением)
Где, как в 8086 году, если мы хотим, чтобы величина сдвига была больше 1, мы должны использовать регистр для хранения значения суммы сдвига!