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는 부호 없는 나머지, 즉 부호 없는 나눗셈 후 남는 값을 계산합니다. 이는 rem이 div와 맺는 관계와 같은 관계를 divu와 맺습니다. u는 비트가 0부터 약 40억까지의 음이 아닌 수로 취급된다는 뜻입니다. divu 페이지에서는 같은 비트를 부호 있는 값과 부호 없는 값으로 읽을 때 어떻게 달라지는지 다룹니다.

remu의 결과는 항상 0과 제수에서 1을 뺀 값 사이에 있으므로 결코 음수가 되지 않으며 부호 규칙도 없습니다. 따라서 원형 버퍼에서 위치를 감싸거나, 해시 값을 고정된 수의 슬롯에 분배하거나, 반복되는 시퀀스를 순환하는 데 유용합니다.

0으로 나눈 나머지는 원래 수를 반환합니다.

RISC-V 매뉴얼에 따르면 부호 없는 나눗셈 오버플로는 발생할 수 없으므로 remu에는 오버플로 사례가 없습니다. 0으로 나눈 나머지는 피제수와 같습니다. 매뉴얼은 몫과 나머지가 모두 필요할 때 같은 피연산자에 대해 divu와 remu를 실행할 것을 권장하며, 그러면 프로세서가 둘을 하나의 나눗셈으로 융합할 수 있습니다.

제수가 2의 거듭제곱인 경우 비트 AND(andi)가 같은 결과를 더 저렴하게 산출합니다. 아래 줄은 8로 나눈 후의 나머지를 계산합니다. 2의 거듭제곱으로 나눈 나머지는 값의 최하위 비트이기 때문입니다.

andi t0, t0, 7

이 지름길은 2의 거듭제곱에만 적용됩니다.

예시

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