CS/어셈블리

[SPARC] 4. Stack Machine, Single Register Machine, Multiple Register Machine

2023. 9. 14. 00:14
목차
  1. 1. Stack Machine
  2. 2. Single-Register Machine
  3. 3. Multiple-Register Machine
반응형

지난 포스팅에서 CPU Machine 의 타입으로

Stack Machine, Single Register Machine, Multiple Register

이렇게 3가지가 있다고 정리하였다.

 

이번에는 각 타입마다 (A+B) * (C+D) 의 연산을 어떤 과정으로 수행하는지 자세히 보면서

각 머신의 특징을 정리하고자한다.


1. Stack Machine

스택 머신은 말 그대로, 레지스터 대신 스택을 사용하여 연산을 수행한다.

스택에는 Push, Pop 2가지 연산이 있다.

스택 머신은 어떤 데이터가 필요한지 명시할 필요가 없다는 특징이 있다.

add 를 한다고 하면, 그냥 스택에서 pop을 두 번 수행해서 나온 값들을 더하면 된다.

 

스택 머신에서 (A+B) * (C+D) 연산을 수행하는 과정은 다음과 같다.

 

 

1. push A : 메모리의 A 위치에서 값을 가져와 스택에 넣는다.

2. push B : 메모리의 B 위치에서 값을 가져와 스택에 넣는다.

3. add : 스택에서 POP을 두번 수행하여 add 연산을 수행한 뒤 결과를 스택에 넣는다.

4. push C : 메모리의 C 위치에서 값을 가져와 스택에 넣는다.

5. push D : 메모리의 D 위치에서 값을 가져와 스택에 넣는다.

6. add : 스택에서 POP을 두번 수행하여 add 연산을 수행한 뒤 결과를 스택에 넣는다.

7. mul : 스택에서 POP을 두번 수행하여 mul 연산을 수행한 뒤 결과를 스택에 넣는다.

8. pop X : 스택에서 POP을 수행하여 나온 값을 메모리의 X 위치에 저장한다.

 

 


2. Single-Register Machine

Single-Register Machine 은 말 그대로 연산시 1개의 레지스터를 사용한다.

이 Single-Register 가 Accumulator 의 역할을 하기 때문에 Accumulator Machine 이라고도 한다.

Accumulator는 가산기로서, 자신에 값에 피연산자를 추가로 연산하여 자신의 공간에 그대로 저장한다.

+=, -=, *=, /= 이런 연산을 생각하면 편하다.

 

그래서 피연산자 2개중 한개는 가산기에 존재하고, 나머지 하나는 메모리에 존재한다.

현재 연산하는 데이터만 저장할 수 있기 때문에, 중간 값을 저장할 때는 메모리를 이용한다(..)

그래서 굉장히 느리다고 한다.

 

단일 레지스터 머신에서 (A+B) * (C+D) 연산을 수행하는 과정은 다음과 같다.

 

 

1. load A : 메모리의 A 위치에서 값을 가져와 ACC에 넣는다.

2. add B : 메모리의 B 위치에서 값을 가져와 ACC에 더한다.

3. store T : ACC의 값을 메모리의 T 위치에 저장한다.

4. load C : 메모리의 C 위치에서 값을 가져와 ACC에 넣는다.

5. add D : 메모리의 D 위치에서 값을 가져와 ACC에 더한다.

6. mul T : 메모리의 T 위치에서 값을 가져와 ACC에 곱한다.

7. store X : ACC의 값을 메모리의 X 위치에 저장한다.

 

 


3. Multiple-Register Machine

이름 그대로 여러개의 레지스터를 활용하는 CPU Machine 이다.

연산시 레지스터의 ID를 가리키는 과정이 필요하다.

 

다중 레지스터 머신에서 (A+B) * (C+D) 연산을 수행하는 과정은 다음과 같다.

 

 

1. load A, R1 : 메모리의 A 위치에서 값을 가져와 R1 레지스터에 넣는다.

2. load B, R2 : 메모리의 B 위치에서 값을 가져와 R2 레지스터에 넣는다.

3. add R1, R2, R3 : R1, R2 값을 더하고, 결과값을 R3 에 저장한다.

4. load C, R1 : 메모리의 C 위치에서 값을 가져와 R1 레지스터에 넣는다.

5. load D, R2 : 메모리의 D 위치에서 값을 가져와 R2 레지스터에 넣는다.

6. add R1, R2, R4 : R1, R2 값을 더하고, 결과값을 R4 에 저장한다.

7. mul R3, R4, R5 : R3, R4 값을 곱하고, 결과값을 R5 에 저장한다.

8. store R5, X : R5 의 값을 메모리의 X 위치에 저장한다.


정리하면 각 CPU 타입마다 load, store, add, mul 연산 구조에 차이가 있었다.

 

스택 머신은 레지스터 위치를 명시할 필요가 없어

load, store 시에는 메모리 위치만 명시하면 되고,

add, mul 연산은 위치 명시가 필요하지 않았다.

source 위치와 target 위치가 필요하지 않기 때문이다.

 

단일 레지스터 머신도 비슷하게 레지스터가 1개이므로 메모리 위치만 알면 되기에

load, store 시에는 메모리 위치만 명시하면 되고,

add, mul 연산은 기존 acc에 데이터를 추가하는 방식이라 메모리 주소를 하나만 알면 되었다.

 

다중 레지스터 머신은 레지스터가 여러개이기 때문에 레지스터 위치와 메모리 위치가 모두 필요했다.

그래서 load, store 시에는 메모리 위치, 레지스터 위치가 필요하고,

add, mul 연산은 source 레지스터 위치 2개와 target 레지스터 위치 1개가 필요했다.


다음 포스팅에서는 파이프라인이라는 기술을 이용하여

명령어를 더 빠르게 효율적으로 처리하는 방식에 대해 정리하고자 한다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 어셈블리' 카테고리의 다른 글

[SPARC] 6. Pipelining Hazard  (2) 2023.09.21
[SPARC] 5. Pipelining Analogy & SPARC Pipeline Stage Example  (1) 2023.09.19
[SPARC] 3. Computer System Organization (CPU Machine Type)  (0) 2023.09.13
[SPARC] 2. Computer System Organization  (2) 2023.09.08
[SPARC] 1. Introduction & Computer System Organization  (2) 2023.09.07
  1. 1. Stack Machine
  2. 2. Single-Register Machine
  3. 3. Multiple-Register Machine
'CS/어셈블리' 카테고리의 다른 글
  • [SPARC] 6. Pipelining Hazard
  • [SPARC] 5. Pipelining Analogy & SPARC Pipeline Stage Example
  • [SPARC] 3. Computer System Organization (CPU Machine Type)
  • [SPARC] 2. Computer System Organization
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
에버듀
Blog. 에버듀
에버듀
전체
오늘
어제
  • 분류 전체보기 (607) N
    • 개인 프로젝트 (43)
      • [2020] 카카오톡 봇 (9)
      • [2021] 코드악보 공유APP (22)
      • [2022] 유튜브 뮤직 클론코딩 (9)
      • [2025] 고성능 에코서버 만들기 (0)
      • 간단한 프로젝트 (3)
    • 팀 프로젝트 (22)
      • [2020] 인공지능 숫자야구 (4)
      • [2022] OSAM 온라인 해커톤 (10)
      • [2024] GDSC 프로젝트 트랙 (6)
      • [2025] 큰소리 웹 페이지 (2)
    • 알고리즘 (PS) (107)
      • BOJ (101)
      • Programmers (5)
      • 알고리즘 이모저모 (1)
    • CS (329)
      • 자료구조 (19)
      • 어셈블리 (41)
      • 멀티미디어응용수학 (7)
      • 컴퓨터 구조 (29)
      • 알고리즘 분석 (4)
      • 컴퓨터 네트워크 (38)
      • 프로그래밍언어론 (15)
      • HCI 윈도우즈프로그래밍 (26)
      • 기초데이터베이스 (29)
      • 운영체제 (23)
      • 오토마타 (24)
      • 문제해결기법 (11)
      • 블록체인 (22)
      • 소프트웨어공학 (21)
      • 기계학습심화 (12)
      • 컴퓨터그래픽스와 메타버스 (8)
    • 자기계발 (38) N
      • 동아리 (7)
      • 자격증 (3)
      • 코딩테스트, 대회 (8)
      • 생각 정리 (19) N
      • 머니 스터디 (1)
    • WEB(BE) (5)
      • express.js (1)
      • flask (0)
      • Spring & Spring Boot (4)
    • WEB(FE) (2)
      • html, css, js (1)
      • React.js (1)
    • Tool & Language (6)
      • Edit Plus (1)
      • Git (1)
      • Python3 (2)
      • Java (2)
    • Infra (12)
      • AWS (1)
      • Oracle Cloud (8)
      • Firebase (2)
      • Network (1)
    • Android (18)
      • Java (6)
      • Flutter (12)
    • Window (2)
      • Visual Studio 없이 WPF (1)
      • MFC (1)
    • 독서 (14)
      • Inside Javascript (7)
      • Database Internals (6)
      • 한 글 후기 (1)
    • 인턴 (8)
      • 델파이 (7)
      • Oracle (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.1.4
에버듀
[SPARC] 4. Stack Machine, Single Register Machine, Multiple Register Machine
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.