2015-09-27 1 views
0

Итак, у нас есть два регистра $ s0 и $ s1. Регистр $ s0 может принимать значения от 0 до 31 и используется, чтобы показать, сколько бит регистра $ s1 будет сдвинуто влево. Как я могу сделать это без использования sll или srl. Я знаю, что левый логический сдвиг на n бит совпадает с умножением на 2^n. Это упражнение дает нам понять, что это можно сделать только с 4 инструкциями. Оба регистра являются 32-битными.Замена левых логических сдвигов другими инструкциями в MIPS

+0

4 инструкции или 4 _ линии кода_? I.e, разрешены ли петли? – Michael

+0

@Michael 4 инструкция. Он ничего не говорит о петлях. – CharisAlex

+0

Сколько бит требуется для хранения значений от 0 до 31? Как каждый бит влияет на значение сдвига и как это влияет на результат? Думаете, это может быть связано с реализацией четырех команд? – Davislor

ответ

1

Вы можете добавить $s1 к себе $s0 раз (каждый раз он умножает свое значение на 2, который сдвигает свои биты влево один раз).

код будет выглядеть следующим образом:

beqz $s0, end 
loop: 
    add $s1, $s1, $s1 
    subu $s0, $s0, 1 
    bnez $s0, loop 
end: 

Первый условный переход является обеспечение никаких действий не принимается $s1$s0, когда имеет нулевое значение.

 Смежные вопросы

  • Нет связанных вопросов^_^