slti
lyszt.net охватывает slti и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
slti сравнивает регистр с константой и записывает 1 или 0 в приёмник. Это slt, который сравнивает два регистра и сохраняет результат в виде числа (см. эту страницу), но со вторым значением, заданным как непосредственное значение. Непосредственное значение — это константа, закодированная в инструкции, и буква i в названии это обозначает.
Форма slti показана ниже. Когда значение в rs1 меньше константы imm, rd получает 1, иначе 0.
slti rd, rs1, imm
Сравнение знаковое, поэтому и регистр, и константа читаются как числа, которые могут быть отрицательными.
Используйте её для сравнения переменной с фиксированным порогом, известным заранее. Проверка того, меньше ли индекс 10 или не опустилось ли значение ниже предела, требует одной slti. Следующая строка спрашивает, меньше ли t0 нуля, что проверяет отрицательное значение и устанавливает t1 в 1 для отрицательных значений и в 0 в противном случае.
slti t1, t0, 0
Руководство RISC-V говорит, что slti помещает 1 в rd, если rs1 меньше непосредственного значения, расширенного со знаком, когда оба рассматриваются как знаковые числа, и 0 в противном случае. Проверка переполнения для общего знакового сложения использует её, как показано на странице slt, чтобы записать, является ли операнд отрицательным.
Константа находится в диапазоне от -2048 до 2047. Чтобы сравнить с большим значением, загрузите константу в регистр с помощью li и используйте slt. Ассемблер отклоняет константу вне диапазона с сообщением об ошибке.
Пример
li t0, 3 slti t1, t0, 5 # t1 = 1 (3 < 5)
Ссылки
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
