bltzпсевдо

bltz

псевдо
RISC-V Ассемблер Ссылка

lyszt.net охватывает bltz и другие инструкции RISC-V более подробно.

Описание

bltz выполняет ветвление, когда регистр содержит отрицательное число. Название означает branch if less than zero (ветвление, если меньше нуля). Приведённая ниже форма выполняет переход к помеченной позиции, если rs меньше нуля, и в противном случае продолжает со следующей инструкции.

bltz rs, label

Ассемблер переписывает эту псевдоинструкцию в реальную инструкцию. Она превращается в приведённую ниже инструкцию, которая сравнивает регистр с zero — регистром, который всегда содержит 0.

blt rs, zero, label

Сравнение знаковое, поэтому 32 бита в регистре читаются как число, которое может быть отрицательным. Ветвление сравнивает два регистра и не может принимать константу, записанную в инструкции, поэтому 0 берётся из регистра zero. См. blt для ветвлений, сравнивающих два значения, и beq о том, как работают метки.

Чтобы проверить, меньше ли значение нуля, поместите значение в регистр и примените к нему bltz. Обычные случаи — проверка результата вычитания на то, не стало ли оно ниже нуля, и проверка результата функции, которая сообщает об ошибке отрицательным числом.

sub t0, t1, t2
bltz t0, smaller

Приведённые выше строки выполняют переход к smaller, когда результат вычитания меньше нуля. Результат, равный ровно 0, не является отрицательным и продолжает со следующей инструкции. Противоположное ветвление, которое также принимает ноль, — это bgez.

Разворачивается в

blt rs, zero, label

Ассемблер заменяет эту псевдоинструкцию реальной инструкцией или инструкциями, перечисленными выше.

Пример

li t0, -3
bltz t0, done   # t0 < 0, so jump to 'done'