TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > Architecture / ISA > MIPS vs RISC-V 핵심 어셈블리 명령어 1:1 대응 비교 치트시트
Architecture / ISA Beginner MIPS32 / RISC-V RV32I

MIPS vs RISC-V 핵심 어셈블리 명령어 1:1 대응 비교 치트시트

산술(Add/Sub), 논리(And/Or/Xor), 메모리 로드/스토어(Lw/Sw), 조건 분기 및 점프(Branch/Jump) 명령어의 MIPS vs RISC-V 문법 차이와 일대일 대응 가이드.

#MIPS #RISC-V #Assembly #Cheat Sheet #Computer Architecture
핵심 개념MIPS와 RISC-V는 모두 로드-스토어(Load-Store) 기반 32개 레지스터 구조를 공유하는 친척 관계의 RISC 아키텍처입니다. 하지만 피연산자 순서, 오프셋 즉시값 표기법, 조건 분기 방식, 지연 슬롯(Delay Slot) 유무에서 결정적인 차이가 있습니다. 두 아키텍처 간 1:1 변환 치트시트입니다.

1. 산술 및 논리 연산 명령어 비교

동작 설명MIPS 문법RISC-V 문법차이점 / 비고
레지스터 덧셈add $d, $s, $tadd rd, rs1, rs2동일 (rd = rs1 + rs2)
상수 덧셈addi $t, $s, immaddi rd, rs1, immMIPS는 rt가 목적지, RISC-V는 rd
레지스터 뺄셈sub $d, $s, $tsub rd, rs1, rs2동일 (rd = rs1 - rs2)
비트 AND / ORand $d, $s, $t / orand rd, rs1, rs2 / or동일
비트 XORxor $d, $s, $txor rd, rs1, rs2동일
좌측 논리 시프트sll $d, $t, shamtslli rd, rs1, shamtRISC-V는 즉시값 시프트에 'i' 접미사 사용
우측 산술 시프트sra $d, $t, shamtsrai rd, rs1, shamt부호 비트 보존 시프트

2. 메모리 접근(Load / Store) 비교

동작 설명MIPS 문법RISC-V 문법차이점 / 비고
4바이트 워드 로드lw $t0, 8($s0)lw t0, 8(s0)동일한 문법 (목적지, 오프셋(베이스))
4바이트 워드 스토어sw $t0, 8($s0)sw t0, 8(s0)동일한 문법 (소스, 오프셋(베이스))
1바이트 부호 로드lb $t0, 0($s0)lb t0, 0(s0)동일 (부호 확장)
1바이트 부호없는 로드lbu $t0, 0($s0)lbu t0, 0(s0)동일 (0 확장)

3. 조건 분기 및 점프 비교 (가장 큰 차이)

동작 설명MIPS 문법 (Delay Slot 있음)RISC-V 문법 (Delay Slot 없음)주요 차이점
값이 같으면 분기beq $t0, $t1, labelbeq t0, t1, labelRISC-V는 다음 행을 무조건 실행하지 않음
값이 다르면 분기bne $t0, $t1, labelbne t0, t1, label동일
미만 비교 분기 (<)slt $at, $t0, $t1 bne $at, $0, labelblt t0, t1, labelRISC-V는 1개 명령어로 직접 대소 분기 가능
이상 비교 분기 (>=)slt $at, $t0, $t1 beq $at, $0, labelbge t0, t1, labelMIPS는 slt 플래그 검사 필요, RISC-V는 직접 분기
함수 호출 (점프 & 링크)jal targetjal ra, targetMIPS는 암시적으로 $ra, RISC-V는 명시적 링크 레지스터
함수 복귀 (레지스터 점프)jr $raret (jalr zero, ra, 0)RISC-V는 ret 의사 명령어로 제공

4. 실전 반복문 어셈블리 1:1 비교

loop_comparison.s
# C 코드: while (i < n) { sum += i; i++; }

# --- [MIPS 어셈블리] ---
loop_mips:
    slt  $t2, $t0, $t1       # $t2 = (i < n)
    beq  $t2, $zero, exit_mips
    nop                      # <- 분기 지연 슬롯 (Branch Delay Slot)
    add  $s0, $s0, $t0       # sum += i
    addi $t0, $t0, 1         # i++
    j    loop_mips
    nop                      # <- 점프 지연 슬롯
exit_mips:

# --- [RISC-V 어셈블리] ---
loop_riscv:
    bge  t0, t1, exit_riscv  # i >= n 이면 탈출 (지연 슬롯 없음! 직관적)
    add  s0, s0, t0          # sum += i
    addi t0, t0, 1          # i++
    j    loop_riscv          # jal zero, loop_riscv
exit_riscv:

참고자료 & 관련 링크