Итак, у нас есть два регистра $ s0 и $ s1. Регистр $ s0 может принимать значения от 0 до 31 и используется, чтобы показать, сколько бит регистра $ s1 будет сдвинуто влево. Как я могу сделать это без использования sll или srl. Я знаю, что левый логический сдвиг на n бит совпадает с умножением на 2^n. Это упражнение дает нам понять, что это можно сделать только с 4 инструкциями. Оба регистра являются 32-битными.Замена левых логических сдвигов другими инструкциями в MIPS
0
A
ответ
1
Вы можете добавить $s1
к себе $s0
раз (каждый раз он умножает свое значение на 2, который сдвигает свои биты влево один раз).
код будет выглядеть следующим образом:
beqz $s0, end
loop:
add $s1, $s1, $s1
subu $s0, $s0, 1
bnez $s0, loop
end:
Первый условный переход является обеспечение никаких действий не принимается $s1
$s0
, когда имеет нулевое значение.
4 инструкции или 4 _ линии кода_? I.e, разрешены ли петли? – Michael
@Michael 4 инструкция. Он ничего не говорит о петлях. – CharisAlex
Сколько бит требуется для хранения значений от 0 до 31? Как каждый бит влияет на значение сдвига и как это влияет на результат? Думаете, это может быть связано с реализацией четырех команд? – Davislor