seqzпсевдо

seqz

псевдо
Асемблер RISC-V Посилання

lyszt.net охоплює seqz та інші інструкції RISC-V більш детально.

Опис

seqz перевіряє, чи містить регістр нуль. Назва означає "set if equal to zero" (встановити, якщо дорівнює нулю). Коли вихідний регістр rs дорівнює нулю, наведена нижче форма записує 1 у регістр призначення rd, а 0 — коли rs містить будь-яке інше значення.

seqz rd, rs

Результат — 1 або 0, відповідаючи на питання, чи дорівнює значення нулю.

seqz — це псевдоінструкція: читабельна назва, яку асемблер переписує в реальну інструкцію. Результатом є наведена нижче інструкція, яка запитує, чи значення менше 1.

sltiu rd, rs, 1

Серед беззнакових чисел 0 — єдине значення, менше 1. Ви пишете seqz, а асемблер виконує переклад.

Жодна інструкція RISC-V не запитує, чи два значення рівні, тому seqz використовується для побудови перевірок на рівність. Застосуйте XOR до двох значень, що дає нуль, коли вони збігаються, і ненульовий результат, коли вони різняться, потім застосуйте seqz до цього результату. 1 означає, що вихідні значення були рівні. Сторінка xor пояснює, чому XOR виявляє рівність.

Посібник RISC-V визначає seqz як псевдоінструкцію асемблера для sltiu з константою 1, яка встановлює rd у 1, якщо rs1 дорівнює нулю, і в 0 в іншому випадку.

seqz також інвертує сенс значення істина або хиба. Регістр, що містить 0, стає 1, а будь-яке ненульове значення стає 0. Відповідь — звичайне число, тому його можна використовувати в подальшій арифметиці, наприклад помножити на нього, щоб обнулити значення за умовою. Його відповідник — snez, який перевіряє на ненульове значення.

Розгортається до

sltiu rd, rs, 1

Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.

Приклад

li t0, 0
seqz t1, t0       # t1 = 1