srl
lyszt.net охватывает srl и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
srl сдвигает биты вправо, то есть выполняет обратное тому, что делает sll. Буквы означают shift right logical (логический сдвиг вправо). Эта форма берёт биты из rs1, сдвигает их вправо на количество, указанное в rs2, и сохраняет результат в rd.
srl rd, rs1, rs2
Любые биты, выдвинутые за правый край, теряются, а освободившиеся места слева заполняются нулями.
Это заполнение нулями объясняет слово logical. Сдвиг вправо уменьшает значение вдвое, поэтому сдвиг на 1 делит на 2, а сдвиг на 3 делит на 8. Остаток отбрасывается, что соответствует целочисленному делению. srl быстро делит беззнаковое число на степень двойки.
Существуют две инструкции сдвига вправо, и разница заключается в том, что попадает в освободившиеся старшие биты. srl помещает туда нули. Её аналог sra копирует знаковый бит в эти позиции, что сохраняет знак отрицательных чисел. Выбирайте srl для необработанного битового шаблона или значения, которое не может быть отрицательным. Для знакового значения, которое может быть отрицательным, srl даёт большое положительное число, и в этом случае правильной инструкцией является sra.
Согласно руководству по RISC-V, количество сдвигов занимает младшие 5 битов регистра rs2. Эти 5 битов охватывают от 0 до 31 позиции, поэтому остальные биты rs2 игнорируются. В руководстве srl называется логическим сдвигом вправо, который вставляет нули в старшие разряды.
Когда количество сдвигов является константой, используйте непосредственную форму srli.
Пример
li t0, -8 li t1, 1 srl t2, t0, t1 # t2 = 2147483644 (zero-filled)
