rem
lyszt.net은 rem 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
rem은 나눗셈의 나머지, 즉 남는 수를 반환합니다. 17을 5로 나누면 3이 들어가고 2가 남습니다. div는 3을 반환하고 rem은 2를 반환합니다. 이 이름은 나머지(remainder)의 줄임말입니다. 형식은 아래와 같으며, rd = rs1을 rs2로 나눈 나머지임을 의미합니다.
rem rd, rs1, rs2
이 명령어는 div와 마찬가지로 선택적 M 수학 확장 기능에 속합니다.
이 두 명령어는 동일한 숫자 쌍을 처리하며, 함께 사용되면 몫과 나머지 값을 반환합니다. rem은 고수준 언어의 %(모듈로) 연산자에 해당하는 어셈블리 형식입니다.
음수의 경우, 나머지 값은 피제수의 부호를 따릅니다. 7을 2로 나눈 나머지는 1이고, -7을 2로 나눈 나머지는 -1입니다. 2로 나눈 나머지가 1인지 확인하여 홀수 여부를 판단하는 방법은 음수의 경우 잘못된 결과를 반환합니다. 나머지가 0인지 확인하면 모든 부호에 대해 짝수인지 홀수인지 판단할 수 있습니다.
RISC-V 매뉴얼에 따르면 rem은 해당 나눗셈의 나머지를 제공하며, 0이 아닌 결과는 피나눗수의 부호를 따른다고 합니다. 오버플로우가 발생하지 않는 모든 나눗셈은 피나눗수 = 나눗수 × 상수 + 나머지를 만족합니다. 0으로 나눈 나머지는 피제수와 같으며, 부호 있는 오버플로우의 경우, 즉 가장 큰 음수를 -1로 나눈 결과의 나머지는 0이 됩니다. 동일한 나눗셈에 대한 상수와 나머지를 얻으려면, 매뉴얼에서는 동일한 피연산자에 대해 div를 먼저 실행한 다음 rem을 실행할 것을 권장하며, 프로세서는 이를 단일 나눗셈 연산으로 병합할 수 있습니다.
나머지는 카운터를 버퍼의 시작점으로 되돌리거나, 숫자의 자릿수를 제거하거나, 항목을 슬롯에 분산시키는 데 사용됩니다. 0으로 나눈 나머지는 원래의 숫자를 반환합니다. 이 예제는 17을 5로 나눈 나머지를 계산하여 t2에 2를 저장합니다.
예시
li t0, 17 li t1, 5 rem t2, t0, t1 # t2 = 2
