본문 바로가기
컴퓨터시스템구조

[컴퓨터시스템구조] 06. MIPS 포맷(R-포맷, I-포맷)

by 파스텔코랄 2023. 10. 14.

명령어 표현

  • 명령어는 2진수로 인코딩 = 기계어
  • MIPS 명령어
  • 32비트 명령어로 인코딩
    • 연산 코드(opcode)를 인코딩하는 형식의 작은 수, 레지스터 번호 등
    • 규칙성
  • 레지스터 번호
    • $t0 – $t7 : 레지스터 8 – 15
    • $t8 – $t9 : 레지스터 24 – 25
    • $s0 – $s7 : 레지스터 16 – 23
  • 레지스터를 표현하는데 5비트 필요
    • 32 = 2^5이기 때문이다.

 


 

MIPS R-포맷 명령어(add, sub)

  • Register 포맷
op rs rt rd shamt funct
6비트 5비트 5비트 5비트 5비트 6비트
  • op : 연산 코드(opcode)
  • rs : 첫 번째 소스 레지스터 번호
  • rt : 두 번째 소스 레지스터 번호
  • rd : 대상 레지스터 번호
  • shamt : shift amount (현재는 00000)
  • funct : 함수 코드(opcode 확장)

 

R-포맷 예제

add $t0, $s1, $s2
# $t0 : 8, $s1 : 17, $s2 : 18

어셈블리어 코드를 기계어로 변환

special $s1 $s2 $t0 0 add
0 17 18 8 0 32
000000 10001 10010 01000 00000 100000

0000 0010 0011 0010 0100 0000 0010 0000_2 = 02324020_16

 


 

MIPS I-포맷 명령(addi, lw, sw)

  • Immediate 포맷
op rs rt constant or address
6비트 5비트 5비트 16비트
  • 직접 산술 및 로드/저장 명령
  • rt : 대상 또는 소스 레지스터 번호
  • constant : -2^15 ~ +2^15 – 1
  • address : rs의 기본 주소에 오프셋이 추가

  • 디자인 원칙 4: 좋은 디자인에는 좋은 타협이 필요하다.
    • 다양한 형식으로 인해 디코딩이 복잡해졌지만 32비트 명령을 균일하게 허용
    • 형식을 최대한 유사하게 유지

 

I-포맷 예제

lw $t0, 32($s0)

 

  • lw : op (6비트)
  • $t0 : rt (5비트)
  • 32 : constant (16비트)
  • $s0 : rs (5비트)

 


 

내장 프로그램

  • 데이터와 마찬가지로 바이너리로 표현되는 명령어
  • 메모리에 저장된 명령 및 데이터
  • 프로그램은 프로그램에서 작동할 수 있다.
    • 예: 컴파일러, 링커, ...
  • 바이너리 호환성을 통해 컴파일된 프로그램이 다른 컴퓨터에서 작동할 수 있다.
    • 표준화된 ISA(명령어 집합)

 

댓글