remu

remu

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

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

Формат кодування

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Опис

remu обчислює беззнаковий остачу — значення, що залишається після беззнакового ділення. Він співвідноситься з divu так само, як rem з div. Літера u означає, що біти розглядаються як невід'ємні числа, від 0 приблизно до 4 мільярдів. Сторінка divu описує, чим відрізняються знакове та беззнакове прочитання одних і тих самих бітів.

Результат remu завжди лежить між 0 і дільником мінус 1, тому він ніколи не буває від'ємним і не має правила знака. Це робить його корисним для зациклення позиції в кільцевому буфері, розподілу хеш-значень за фіксованою кількістю слотів і циклічного перебору повторюваної послідовності.

Остача від ділення на нуль повертає початкове число.

Згідно з посібником RISC-V, переповнення беззнакового ділення не може статися, тому remu не має випадку переповнення. Остача від ділення на нуль дорівнює діленому. Посібник рекомендує виконувати divu і remu на тих самих операндах, коли потрібні і частка, і остача, щоб процесор міг об'єднати їх в одне ділення.

Для дільника, що є степенем двійки, побітове AND (andi) дає той самий результат дешевше. Наведений нижче рядок обчислює остачу після ділення на 8, оскільки остача від ділення на степінь двійки — це наймолодші біти значення.

andi t0, t0, 7

Це скорочення застосовується лише до степенів двійки.

Приклад

li t0, -1
li t1, 10
remu t2, t0, t1   # t2 = 5 (t0 read as unsigned)