Computer Science/Computer Architecture

[컴퓨터구조] Lecture 04: Instructions - Language of the Computer - Part1

kangkyunghyun 2026. 2. 8. 16:01
728x90
반응형

경희대학교 김정욱 교수님의 컴퓨터구조 강의를 기반으로 정리한 글입니다.

MIPS(Microprocessor without Interlocked Pipeline Stages)

  • Instruction set architecture created by MIPS technologies

Design Principles of MIPS

  • 성능을 최대화하고, 비용을 최소화하면서, 하드웨어 및 컴파일러를 쉽게 구축할 수 있는 언어를 만들자.
  1. 간단함을 위해 규칙적으로 만들자
  2. 작은 것이 빠르다 → 레지스터 수를 32로 제한
  3. 좋은 설계는 적당한 타협을 요구한다 → 명령어 하나는 32 bits
  • 일반적인 상황은 빠르게 만들자 → $zero 레지스터를 만듦

Arithmetic Instructions in MIPS

General 3-operand format of MIPS assembly language notation

  • 세 개의 operand → 두 개의 source, 한 개의 destination
  • 한 개의 operation (e.g., add, sub, addi, …)
  • 즉, source1과 source2를 operation한 결과를 destination에 저장해라

Register

  • CPU가 요청을 처리할 때 필요한 데이터를 일시적으로 저장하는 기억장치
  • 빠르게 접근, 저장, 데이터 및 명령어 전송을 위해 사용
  • 레지스터 수는 32로 제한 → 많을 수록 많은 정보를 저장해놓고 사용 가능, but 연산할 데이터 양이 줄어듬 → 줄어들면 저장한 정보가 적어, 메모리 접근이 많아짐
  • 0~31까지 번호가 새겨진 레지스터가 있고 레지스터를 나타내기 위해 $와 함께 2글자 문자로 표현됨

Example

  • $s0-$s7: 8개의 값을 저장시킬 수 있는 레지스터. 잃어버리면 안되는 값들을 매핑
  • $t0-$t9: 임시적으로 저장할 데이터를 저장하는 레지스터
  • $zero: 0이라는 값만 저장되어 있음
  • $a0-$a3: 함수에서 인자를 받을 때 사용하는 레지스터
  • $v0-$v1: 리턴 값을 저장하는 레지스터
  • $gp, $fp, $sp: 스택을 다룰 때 사용하는 레지스터
  • $ra: 원래 함수로 돌아가는 주소 값을 담고 있는 레지스터
  • $at: 어셈블러가 알아서 사용하는 레지스터

f = (g + h) - (i + j) # f, g, h, i, j = $s0~$s4
add $t0, $s1, $s2 # 레지스터 $t0에 g + h 저장
add $t1, $s3, $s4 # 레지스터 $t1에 i + j 저장
sub $s0, $t0, $t1 # f에 (g + h) - (i + j)저장

Memory Operands

  • 각각의 메모리에 저장되어 있는 32 bits 데이터를 word라고 함
  • word 하나는 4Byte 크기를 가지고 메모리에 접근하기 위해선 Byte Address가 필요하다 → 4 단위(e.g., 0, 4, 8, 12, …)

g = h + A[8] # g, h = $s1, $s2, A의 base address = $s3
lw $t0, 32($s3) # A[8]을 $t0에 저장, lw = load word
add $s1, $s2, $t0 # g = h + A[8]

A[12] = h + A[8] # h = $s2, A의 base address = $s3
lw $t0, 32($s3) # A[8]을 $t0에 저장
add $t0, $s2, $t0 # h + A[8]을 $t0에 저장
sw $t0, 48($s3) # $t0을 A[12]에 저장, sw = store word

Constant or Immediate Operands

lw $t0, AddrConstant4($s1) # $t0 = constant 4
add $s3, $s3, $t0 # $s3 = $s3 + $t0 ($t0 = 4)

addi $s3, $s3, 4 # $s3 = $s3 + 4

  • 인스터럭션 수, 메모리 접근 시간 감소

MIPS register 0 ($zero) is the constant 0

  • 값을 전달할 때 자주 쓰임

add $t2, $s1, $zero # $t2 = $s1

Example

addi $t0, $s2, -5 or subi $t0, $s2, 5
add $s0, $s1, $t0

lw $t0, 16($s6)
sub $t0, $zero, $t0
sub $s0, $t0, $s1

MIPS assembly language

728x90
반응형