rem
lyszt.net охоплює rem та інші інструкції RISC-V більш детально.
Формат кодування
Опис
rem повертає остачу від ділення, тобто те, що залишилося. При діленні 17 на 5 отримуємо 3 цілих і 2 в остачі. div повертає 3, а rem повертає 2. Назва — скорочення від remainder (остача). Форма запису показана нижче й означає rd = остача від ділення rs1 на rs2.
rem rd, rs1, rs2
Вона належить до того самого необов'язкового математичного розширення M, що й div.
Обидві інструкції працюють з однією й тією самою парою чисел і разом дають частку та те, що залишилося. rem — це асемблерна форма оператора % (взяття за модулем) у мовах вищого рівня.
З від'ємними числами остача набуває знака числа, яке ділять. 7 остача 2 дорівнює 1, а -7 остача 2 дорівнює -1. Перевірка на непарність, яка з'ясовує, чи дорівнює остача від ділення на 2 одиниці, дає неправильну відповідь для від'ємних чисел. Перевірка того, чи дорівнює остача нулю, визначає парність чи непарність для будь-якого знака.
Посібник RISC-V каже, що rem дає остачу від відповідного ділення і що ненульовий результат має знак діленого. Будь-яке ділення, яке не спричиняє переповнення, задовольняє рівність ділене = дільник помножити на частку плюс остача. Остача від ділення на нуль дорівнює діленому, а випадок знакового переповнення — найвід'ємніше число, поділене на -1, — дає остачу, що дорівнює нулю. Щоб отримати частку й остачу від одного й того самого ділення, посібник радить виконати div, а потім rem над тими самими операндами, що процесор може об'єднати в одне ділення.
Остачі використовують, щоб повернути лічильник на початок буфера, щоб зняти цифри з числа та щоб розподілити елементи за слотами. Остача від ділення на нуль повертає початкове число. У прикладі обчислюється 17 остача 5, і в t2 залишається 2.
Приклад
li t0, 17 li t1, 5 rem t2, t0, t1 # t2 = 2
