TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > Architecture / ISA > RISC-V M 확장(RV32M) 정수 곱셈 및 나눗셈 하드웨어 명령어 구조
Architecture / ISA Intermediate RISC-V RV32IM / GCC

RISC-V M 확장(RV32M) 정수 곱셈 및 나눗셈 하드웨어 명령어 구조

기본 RV32I에 8개의 정수 곱셈(mul, mulh, mulhu, mulhsu)과 나눗셈/나머지(div, divu, rem, remu) 하드웨어 명령어를 추가하는 RV32M 확장 레퍼런스.

#RISC-V #RV32M #Arithmetic #Hardware #ISA
핵심 개념기본 RV32I에는 실리콘 면적을 아끼기 위해 하드웨어 곱셈기가 없습니다. M 확장(Standard Extension for Integer Multiplication and Division)을 켜면 32비트 × 32비트 = 64비트 곱셈의 상위 32비트(mulh)와 하위 32비트(mul), 부호/비부호 나눗셈(div/divu) 및 나머지(rem/remu)를 단일 명령어로 실행할 수 있습니다.

1. RV32M 명령어 세트 요약

명령어형식연산 내용용도
mul rd, rs1, rs2R-typerd = (rs1 * rs2)[31:0]32비트 곱셈 결과의 하위 32비트
mulh rd, rs1, rs2R-typerd = (rs1 * rs2)[63:32]부호 있는 64비트 곱셈 상위 32비트
mulhu rd, rs1, rs2R-typerd = (rs1 * rs2)[63:32]부호 없는(unsigned) 상위 32비트
div rd, rs1, rs2R-typerd = rs1 / rs2부호 있는 32비트 정수 나눗셈
divu rd, rs1, rs2R-typerd = rs1 / rs2부호 없는 32비트 정수 나눗셈
rem rd, rs1, rs2R-typerd = rs1 % rs2부호 있는 나머지 연산
remu rd, rs1, rs2R-typerd = rs1 % rs2부호 없는 나머지 연산

2. 64비트 전체 곱셈 결과 얻기 예제

full_multiply.s
# 32비트 정수 a(t0)와 b(t1)의 64비트 전체 곱을 (a1:a0)에 저장
# a1 = 상위 32비트, a0 = 하위 32비트

mul   a0, t0, t1      # 하위 32비트 계산
mulh  a1, t0, t1      # 상위 32비트 계산 (부호 보존)

# 0으로 나누기(Divide by Zero) 처리:
# RISC-V는 0으로 나누어도 트랩을 발생시키지 않고 규격상 -1(0xFFFFFFFF)을 반환합니다.

참고자료 & 관련 링크