지난 포스팅에서는 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 |