[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format

2023. 9. 27. 00:39·CS/어셈블리
반응형

지난 포스팅에서는 SPARC 라는 ISA의 특징과

SPARC가 사용하는 레지스터의 종류에 대해 정리하였다.

 

이번에는 SPARC 만의 특징인 Register Window 와

일반적으로 어셈블리 언어에서 사용하는 명령어의 포맷을 정리하고자 한다.


1. Register Window

레지스터 윈도우는 알고리즘 기법 중 하나인 Sliding Window 와 유사한 느낌이다.

Sliding Window 는 보통 덱을 활용해 정해진 메모리 크기 안에서 데이터를 넣고 빼면서

마치 창문을 옆으로 옮기듯이 메모리 사용 공간을 옆으로 옮겨가며 사용함으로서

전체 메모리 사용량을 줄이는 메모리 최적화 기법이다.

 

SPRAC도 유사하게, 한번에 32byte 라는 레지스터만을 사용 가능한데

이 32byte 라는 레지스터 공간을 전체 레지스터에서 창문을 옆으로 밀듯 옮겨가며 쓴다.

그림이 너무 찰떡

32byte 중 8byte 는 global 영역으로 사용하므로 빼두고,

func1 함수를 호출하면 해당 함수에 대한 24byte 공간을 레지스터에 확보한다.

(이 경우, SPARC가 현재 관심을 갖고 있는 메모리 공간은 32byte가 된다.)

 

이제 func1 함수 내에서 func2 함수를 또 호출한다고 해보자.

그러면 func1 함수에서 func2 함수를 호출하면서 인자값을 넘길 때 o-register를 이용하고,

func2 함수 내부에서는 매개변수로 넘겨온 인자값을 받을 때 i-register를 이용하는데,

이 둘이 완벽하게 똑같은 데이터이며 역할을 하므로

실제 하드웨어 register 영역에서 o-register 8byte 와 i-register 8byte를 겹치게 두어

총 레지스터 사용량과, o-register, i-register 간 데이터 이동 비용을 절약하는 것이다.

 

이렇게 함수를 호출할 때 o-register 와 i-register 영역을 실제로는 겹치게 둠으로서

비용을 절약하는 방식을 Register Window 라고 한다.

 

다른 RISC 타입 ISA 어셈블리 언어는 한번에 사용하는 레지스터 크기가 32bit 라면

실제 하드웨어에서도 32bit만 사용하도록 하는 방식을 띄는 것이 주류이기 때문에

Register Window 방식은 SPARC의 특징이라고 볼 수 있다.

 

2. Assembly Instruction Format

이제 일반적인 어셈블리 언어 명령어 포맷을 정리해보자.

어셈블리 명령어는 피연산자의 개수에 따라 3가지로 나뉜다.

 

1. 피연산자가 3개인 경우

op S, A, R

 

우리가 이해하는 수식으로 보면 보통 S op A -> R 형태가 된다.

대표적인 operator 로는 add, sub, and, or 같은 산술연산 또는 논리연산자들이 있다.

 

S 는 Source Register 1 의 주소값이 들어가고

A 는 Source Register2 의 주소값 또는 상수값 (13bit, signed integer) 이 들어갈 수 있다.

중요한 점은, S 부분에는 상수값이 들어갈 수 없다는 것이다.

R 은 Destination Register 주소값이 들어간다.

 

따라서 S, A 로 연산한 결과가 R 레지스터에 들어가는 구조라고 볼 수 있다.


2. 피연산자가 2개인 경우

op A, R

 

1에서 살펴본 바와 같이

A 는 Source Register 의 주소값 또는 상수값 (13bit, signed integer) 이 들어갈 수 있다.

R 은  Destination Register 주소값이 들어간다.


3. 피연산자가 1개인 경우

op R

 

R 은  Destination Register 주소값이나

특정 메모리 주소값(label) 이 들어간다.

 


 

다음 글에서는 본격적인 어셈블리언어의 문법에 대해 정리하고,

어셈블리언어 코딩시 사용되는 명령어 (Instruction) 의 종류에 대해 정리한다.

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

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

[SPARC] 10. SPARC에서 사용하는 메모리 종류  (0) 2023.10.04
[SPARC] 9. Assembly Language Programming  (0) 2023.09.30
[SPARC] 7. SPARC Architecture & Registers  (0) 2023.09.22
[SPARC] 6. Pipelining Hazard  (2) 2023.09.21
[SPARC] 5. Pipelining Analogy & SPARC Pipeline Stage Example  (1) 2023.09.19
'CS/어셈블리' 카테고리의 다른 글
  • [SPARC] 10. SPARC에서 사용하는 메모리 종류
  • [SPARC] 9. Assembly Language Programming
  • [SPARC] 7. SPARC Architecture & Registers
  • [SPARC] 6. Pipelining Hazard
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615) N
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45) N
        • 생각 정리 (23) N
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • 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)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format
상단으로

티스토리툴바