본문 바로가기
컴퓨터공학/시스템프로그래밍

SIC의 구조

by 책 읽는 개발자_테드 2021. 3. 28.
반응형

SIC의 구조

 

시스템 프로그램은 하드웨어와 밀접한 관련이 있다. 하지만 실제 하드웨어는 매우 복잡하여 학습하기에 적합하지 않다. 이를 위해  SIC와 SIC/XE는 가상의 컴퓨터로 실제 컴퓨터 명령을 단순화하여 이해하기 쉽도록 만든 것이다.

 

이 중 SIC는 가상 컴퓨터의 스탠다드 모델이다. 이 글에서는 SIC가 어떤 구조로 이루어져 있는지 아래와 같은 목차로 나누어 알아본다.

 

- 메모리

- 레지스터

- 데이터포맷

- 명령어(Instruction) 포맷과 주소 지정 모드(Addressing mode)

- 명령어 집합


메모리

SIC는 1byte가 8bits로 구성되고, 1word는 3bytes로 구성된다. 

 

컴퓨터에서 연산이 일어나는 기본 단위를 word라고 한다. 컴퓨터에서 수행하는 명령 또한 1 Word로 구성된다. word를 구성하는 3bytes 중 최하위 바이트의 위치로 주소가 지정된다.

 

SIC의 전체 메모리는 2^15 == 32,768 bytes 다.



레지스터

SIC에는 5개의 레지스터가 존재하며, 크기는 각각 24bit다. 레지스터는 숫자로된 표현과 Character 형식(Mnemonic)의 표현 두 가지를 가지고 있다. 

 

Mnemonic

Number

Special Use

A

0

Accumulator register라고 불린다. 기본적인 산술 연산에 사용된다. 계산 결과를 임시저장한다.

X

1

indeX register라고 불린다. 주소를 저장하고 계산한다. loop을 지원하기 위해 존재한다.

L

2

Linkage register라고 불린다. 특정 메모리 주소로 점프하거나 반환된 주소들을 저장한다. return을 지원하기 위해 존재한다.

PC

8

Program Counter register라고 불리고, 연산을 위해 다음 명령어의 주소를 가리킨다.

SW

9

Status Word register(상태 레지스터)라고 불리고, 다양한 상태의 Flag들을 저장하는 CC 레지스터를 포함한다.

 

  • 상태(status) 레지스터 또는 플래그 레지스터는 마이크로프로세서에서 다양한 산술 연산 결과의 상태를 알려주는 플래그 비트들이 모인 레지스터이다.

 

데이터포맷

 

SIC는 두 가지 데이터 포맷, Character와 Integer를 갖는다. (Floating-point number 지원 x, SIC/XE에서 지원)

 

모든 Character는 8비트의 ASCII코드로 관리되고, Integer는 24비트의 2진수로 관리된다. 음수는 2의 보수로 표현된다.

 

명령어(Instruction) 포맷과 주소 지정 모드(Addressing mode)

 

명령어 포맷은 24비트로 되어있고, 세 가지 부분으로 나뉜다.

OPCODE(8)

X

Address(15)

 

1. 맨 앞 8자리 opcode는 어떤 명령을 내릴 것인가를 나타낸다. 

2. X는 Index-Address mode를 나타내는 플래그다.

 

모드

indication

target address

Direct

x=0

TA = address

Indexed

x=1

TA = address + (x)

Direct 모드는 index code 0 값을 갖고, target address가 실제 명령을 수행할 주소가 된다.

Indexed모드는 index code 1 값을 갖고, target address + (X register의 값)이 실제 명령을 수행할 주소가 된다.

 

이렇게 주소를 참조하는 방식이 2가지인 이유는 loop를 지원하기 위해서다.

 

예를 들어 배열 arr[i]를  i = 0 ~ 100까지 더하는 경우 target address를 매번 새로 지정하는 것이 아니라 arr[0]에서 X register 만큼 떨어진 주소의 메모리를 참조하고 이 X register의 값을 계속 증가시킨다. 

 

3. Address는 메모리 주소를 나타낸다.



명령어 집합

 

SIC 머신의 어셈블리 명령어 종류는 다음과 같다.

 

1. Load와 Store

메모리에서 레지스터로 값을 불러온다.

LDA: LoaD A register의 약자. target address의 값을 1 Word 읽어 A 레지스터에 쓴다.

LDX: LDA와 같은 원리.

LDL: LDA와 같은 원리.

LDCH: Load CHaracter의 약자. target address에서 맨 오른쪽 1Byte를 읽어 A 레지스터에 저장한다.

 

레지스터의 내용을 메모리에 저장한다.

STA: STore A register의 약자. A register의 값을 target address에 저장한다.

STX: STA와 같은 원리.

STL: STA와 같은 원리.

STSW:  STA와 같은 원리.

STCH: STore CHaracter의 약자. target address에 A 레지스터의 맨 오른쪽 1 Byte를 저장한다. 

 

2. Arithmetic과 Logic

산술연산과 논리 연산을 수행하며, 다음과 같은 종류가 있다.

ADD, SUB, MUL, DIV, AND, OR, TIX

 

TIX를 제외한 연산은 A register를 사용하고, TIX는 X register를 사용한다. TIX는 X register를 1 증가시키고, X register의 값과 target address의 값을 비교한 결과를 CC register에 저장한다. X register를 사용하므로 loop에 사용되는 명령어임을 짐작할 수 있다.

 

3. Compare

크다, 작다, 같다 비교 연산을 수행한다.

 

COMP 명령어는 A register의 값과 target address의 값을 비교하고 결과를 CC register에 저장한다.

 

4. Control

다음은 CC(SW에 있는) register 값에 따라  PC 값을 변경하여 target address로 점프하는 명령어다.

J: CC 값에 관계 없이 PC 값을 변경한다. 

JLT: CC 값보다 작으면 PC 값을 변경한다. 

JEQ:  CC값과 같으면 PC 값을 변경한다.

JGT: CC값보다 크면 PC 값을 변경한다.

 

다음 명령어는 점프 후 return을 하기 위한 명령어다.

JSUB: L register(링커, 리턴 할때 찾아 갈 값 보관)에 현재 PC+1을 저장하고, target address로 PC를 변경한다.

RSUB: return을 수행한다.

 

5. I/O

 

TD: Test Device의 약자. I/O 장치를 쓰기 전 사용 가능한지 확인하는 명령어다. 사용이 불가능하면 CC에 0을 저장하고, 사용이 가능하면 0이 아닌 값을 저장한다. 

 

RD: Read Data의 약자. I/O에 1 Byte를 읽는 명령어다. target address에 Input Device로부터 1Byte를 읽어서 A register의 마지막 1 Byte에 저장한다.

 

WD: Write Data의 약자. A register의 마지막 1 Byte를 읽어 Output Device에 전달한다. 

 

1 Word가 아니라 1 Byte 씩 읽고 쓰는 이유는 컴퓨터마다 1 Word의 정의가 다르기 때문에 I/O Device가 모든 컴퓨터에서 동일하게 동작할 수 있게 하기 위해서다.

 

https://dev2820.github.io/computer_science/시스템_프로그래밍/sic란/

http://dev.youngkyu.kr/9

https://ko.wikipedia.org/wiki/%EC%83%81%ED%83%9C_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0

반응형

'컴퓨터공학 > 시스템프로그래밍' 카테고리의 다른 글

SIC 어셈블러(Assembler)  (0) 2021.05.01
SIC/XE의 구조  (0) 2021.03.27
SIC와 SIC/XE란?  (0) 2021.03.22

댓글