slt
lyszt.net охватывает slt и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
slt сравнивает два числа и сохраняет результат как 1 или 0. Название означает set less than (установить, если меньше). Приведённая ниже форма проверяет, меньше ли rs1, чем rs2. Если проверка успешна, инструкция записывает 1 в регистр назначения rd. Если она не проходит, записывается 0.
slt rd, rs1, rs2
Сравнение можно использовать двумя способами. Инструкция ветвления выполняет переход на его основе. Либо ответ да или нет можно сохранить как число, 1 для истины и 0 для лжи, и использовать позже. slt выполняет сохранение. Ассемблер представляет истину и ложь сохранёнными 1 или 0, и это значение можно складывать, маскировать или комбинировать как любое другое число.
Сравнение рассматривает значения как знаковые, поэтому они могут быть отрицательными, и -1 считается меньше 0. Связанная инструкция sltu рассматривает их как беззнаковые, что меняет ответ для больших значений и для значений, которые выглядят отрицательными.
Руководство RISC-V описывает slt и sltu как знаковое и беззнаковое сравнения, которые записывают 1 в rd, если rs1 меньше rs2, и 0 в противном случае. Оно также использует slt в проверке переполнения для общего знакового сложения. После сложения вторая строка ниже фиксирует, является ли второй операнд отрицательным, третья строка фиксирует, меньше ли сумма первого операнда, а последняя строка выполняет переход, когда два ответа различаются.
add t0, t1, t2 slti t3, t2, 0 slt t4, t0, t1 bne t3, t4, overflow
Обоснование состоит в том, что сумма должна быть меньше одного операнда только тогда, когда другой операнд отрицателен.
Инструкции set greater than не существует. Чтобы проверить, больше ли a, чем b, поменяйте операнды местами и спросите, меньше ли b, чем a. В примере сравниваются 3 и 9. Поскольку 3 меньше 9, t2 устанавливается в 1.
Пример
li t0, 3 li t1, 9 slt t2, t0, t1 # t2 = 1
Ссылки
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 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.
