[컴퓨터구조] 2. Instructions: Language of the Computer(4) - MIPS 명령어 형식 (Instruction Formats)

2025. 7. 10. 01:33·Computer Science/컴퓨터구조

 

2. Instructions: Language of the Computer(4) - MIPS 명령어 형식 (Instruction Formats)

#Computer_Architecture


명령어 표현

  • 명령어는 이진수로 인코딩되며, 이를 machine code라고 부릅니다.
  • MIPS 명령어는 32비트 명령어로 인코딩됩니다.
    • opcode의 경우 앞에 6bit를 보고 나머지 26비트가 어떤 필드로 구성되어 있는지 결정된다.
    • add $t1, $s0, $s1
    • add인지 아닌지(opcode), 어떤 레지스터를 활용하는지(5bit) X 3….
    • 이 내용에 대한 세부 내용들은 아래에서 다룸
  • 적은 수의 포맷으로 구성되어 있으며, 각 포맷은 연산 코드(opcode), 레지스터 번호 등을 포함합니다.
  • Register numbers
    • $t0 – $t7 are reg’s 8 – 15
    • $t8 – $t9 are reg’s 24 – 25
    • $s0 – $s7 are reg’s 16 – 23


여기서 레지스터들은 따로 배울 겁니다. 요런 식으로 레지스터가 구성되어 있다는 것만 알고 넘어가면 된다.


16진수

  • 16진수는 비트 문자열의 압축 표현입니다.
  • 4비트는 1개의 16진수 숫자로 표현됩니다.
    • 예시:
      eca8 6420 = 1110 1100 1010 1000 0110 0100 0010 0000
      

MIPS R-포맷 명령어 (R : Register)

R-포맷 : 레지스터가 3개 들어간다. add 명령어를 떠올리면 될 듯
피연산자가 두 개 있고 목적지가 하나인 명령어에 쓰인다. (add, sub, and 등의 산술 연산)

  • 명령어 필드:
    • op: 연산 코드 (opcode)
      • ex)opcode를 보고 funct 코드봐서 add 명령어 임을 확인했으면, 뒤에 어떤 포맷으로 구성되어있는지 알 수 있다(dest 1개, source 2개, …)
    • rs: 첫 번째 소스 레지스터 번호
    • rt: 두 번째 소스 레지스터 번호
      • 알파벳 s 다음 t라서… t에 다른 의미가 있는건 아님
    • rd: 목적지 레지스터 번호
      • 주의! 어셈블리는 목적지 소스 소스 순이지만, R포맷은 소스 소스 목적지임.
    • shamt: 시프트 값 (현재는 00000으로 설정)
    • funct: 함수 코드 (opcode를 확장)
      • R-포맷임을 확인했다면 funct 코드도 확인해야 한다.

R-포맷 예시


아래와 같이 시험문제에서 코드는 알려준다. 포맷은 외워두자!


MIPS I-포맷 명령어(Immediate)

I-포맷 : 레지스터가 2개이다. addi나 lw를 떠올려보세요.
모든 명령어의 길이를 같게 하되, 명령어 종류에 따라 형식은 다르게 하는 방법

  • Immediate arithmetic 및 load/store 명령어(lw, sw)는 I-포맷을 사용합니다.
    • ex) lw $s1, 32($t0)
  • constant에는 음수가 올 수 있다.
    • Constant 범위는 -2^15 ~ 2^15 - 1
    • 레지스터는 32비트이기 때문에 16비트를 sign extension 해줘야 한다.
  • 여기서 rt는 destination이다. (or source register number)
    • lw를 사용하면 rs에 주소 레지스터, rt에 저장할 레지스터, address에 오프셋이 들어감.
  • 설계 원칙 4: 좋은 설계는 좋은 타협을 요구합니다.
    • I-포맷은 32비트 명령어를 균일하게 유지하면서도 복잡한 디코딩을 피할 수 있습니다.
    • 가능한 포맷을 단순하게 유지한다

저장 프로그램 컴퓨터

이 시점에서 "그렇다면 우리가 배운 이 명령어들은 데이터와 함께 어떻게 컴퓨터에 저장되고 처리될까?

  • 명령어는 데이터처럼 이진수로 표현됩니다.
    • 위에서 봤던 것처럼 32비트로
  • 명령어와 데이터는 메모리에 저장됩니다.
  • 프로그램은 프로그램에 대해 동작할 수 있습니다 (예: 컴파일러, 링커 등).
  • 바이너리 호환성을 통해 컴파일된 프로그램이 다른 컴퓨터에서 작동할 수 있습니다.
    • Standardized ISAs
    • ex) x86 ISA로 컴파일 된 프로그램은 x86 아키텍쳐에서 동작하는 어떤 컴퓨터에서든지 동작한다.

Jump Addressing : J - 포맷


J 포맷과 관련된 내용은 뒤에서 자세히 다루게 된다. J - 포맷이 있다 정도만 알고 넘어가자.


j와 jal의 경우 무조건 점프한다. 따라서 타겟 주소만 있으면 된다. 이러한 포맷을 J-포맷이라고 함.

  • j와 jal 명령어의 목표는 텍스트 세그먼트 어디에든 위치할 수 있다.
    • 명령어에 전체 주소를 Encode 한다.

'Computer Science > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] 2. Instructions: Language of the Computer(5) - 논리 및 제어 흐름 명령어  (0) 2025.07.10
[컴퓨터구조] 2. Instructions: Language of the Computer(3) - 컴퓨터 내부의 데이터 표현  (0) 2025.07.10
[컴퓨터구조] 2. Instructions: Language of the Computer(2) - MIPS 기본 연산 및 피연산자  (0) 2025.07.10
[컴퓨터구조] 2. Instructions: Language of the Computer(1) - ISA와 MIPS 아키텍처 소개  (0) 2025.07.10
[컴퓨터 구조] 01. Computer Abstractions and Technology  (0) 2024.10.07
'Computer Science/컴퓨터구조' 카테고리의 다른 글
  • [컴퓨터구조] 2. Instructions: Language of the Computer(5) - 논리 및 제어 흐름 명령어
  • [컴퓨터구조] 2. Instructions: Language of the Computer(3) - 컴퓨터 내부의 데이터 표현
  • [컴퓨터구조] 2. Instructions: Language of the Computer(2) - MIPS 기본 연산 및 피연산자
  • [컴퓨터구조] 2. Instructions: Language of the Computer(1) - ISA와 MIPS 아키텍처 소개
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (463)
      • 개발 일지 (0)
        • Performance (0)
        • TroubleShooting (0)
        • Refactoring (0)
        • Code Style, Convetion (0)
        • Architecture (0)
      • Software Engineering (36)
        • Test (8)
        • 이론 (18)
        • Clean Code (10)
      • Java (72)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (13)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (16)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[컴퓨터구조] 2. Instructions: Language of the Computer(4) - MIPS 명령어 형식 (Instruction Formats)
상단으로

티스토리툴바