컴퓨터 구조 - 5. 명령어 수행 및 레지스터와 메모리

JeongSH·2024년 9월 25일

컴퓨터 구조

목록 보기
5/11

LEGv8 을 기반으로 작성

Instruction

  • Operation, Operands로 구성된다.
  • Instruction은 Memory에 위치한다.
  • ISA에서 규정된 다양한 Operation이 존재한다.
  • Instruction은 binary형태로 메모리에 저장되어있다.
  • RISC의 철학인 단순한 규칙을 가지고 있어 동작이 단순하다.
Example

code:
f = (g+h) - (i+j) 

compiled:
add t0, g, h
add t1, i, j
sub f, t0, t1

동작에 대한 큰 그림

  1. 메모리는 Data Path와 분명히 분리 되어있다.
  2. Register는 Data Path 내부에 있다.
  3. 프로그램은 메모리에 저장된다.
  4. Control Unit은 메모리에서 instruction을 fetch하여 가져온다.
  5. Control Unit은 Data Path가 해야할 일을 전달한다.
  6. Data는 Register에서 Memory, Memory에서 Register로 이동 가능하다. (Load(LDUR), Store(STUR))
  7. 모든 Data의 처리는 Data Path에서 이루어진다.

레지스터

  • LEGv8은 32 * 64bit 만큼 레지스터를 가지고 있다.
  • Word는 32bit 인데 반해, doubleword형식의 공간만큼 할당되어 있다. (부동 소수점과 같은 상황을 위해) (주소 표시, word: W, doubleword: X)
  • RISC의 철학인 "작을수록 빠르다"가 적용되어 32개의 Register를 가지고 있다.

공간할당 (아키텍처마다 다름)

X0-X7: 함수 인자, 결과
X8-X15: 임시 레지스터로, 임시 값을 저장
X16-X17: 함수 호출 시 사용하는 특별한 레지스터로, 인터프로시저 호출에서 사용. (임시 레지스터로도 활용 가능)
X18: 플랫폼 레지스터로 특정 용도로 예약되어 있을 수 있음. (임시 가능)
X19-X30: 보존되는 레지스터로, 함수 호출 후에도 값을 유지해야 하는 데이터가 저장. (X28, X29, X30은 stack pointer, frame pointer, link register(return address)
X31: 제로 레지스터 또는 스택 포인터로 사용되며, 항상 0
(RISC 철학인, 자주 사용되는 변수에 대한 재사용으로 최적화)

예시

f = (g+h) - (i+j) # f, ...,j in X19, ...,X23

compiled LEGv8:
ADD X9, X20, X21
ADD X10, X22, X23
SUB X19, X9, X10

Memory

  • Memory는 복잡한 데이터 구조를 사용한다. (Arrays, structures, dynamic data)
  • Memory에는 Instruction과 Data가 저장된다.
  • Data는 Register에서 Memory로 Store, Load를 통해 불러와지고, 쓰여진다.

예시

A[12] = h + A[8]; # h in X21, A in X22

Compiled LEGv8:
LDUR X9, [X22, #64]
ADD X9, X21, X9
STUD X9, [X22, #96]

0개의 댓글