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

SIC/XE의 구조

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

SIC/XE의 구조

 

SIC/XE(eXtra Equipment)는 SIC의 확장된 모델이며 두 개의 컴퓨터는 상위호환을 보장하여, SIC에서 작동되는 프로그램은 SIC/XE에서 정상적으로 작동된다.

 

SIC 구조의 자세한 설명은 다음 주소를 참고하자.

scshim.tistory.com/293

 

이 글에서는 SIC/XE가 어떤 구조로 이루어져 있는지 아래와 같은 목차로 나누어 알아본다.

 

- 메모리

- 레지스터

- 데이터포맷

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

- 명령어 집합


메모리

SIC/XE의 전체 메모리는 2^20 == 1Mbyte 다.



레지스터

SIC/XE에서는 SIC이 가지고 있는 5개의 레지스터에 4개다 추가되어 9개가 되었다. F 레지스터를 제외한 모든 레지스터는 24bit다.

 

Mnemonic

Number

Special Use

B

3

Base register, 주소 지정에 사용한다.

S

4

범용 레지스터(SIC 머신의 A와 동일)

T

5

범용 레지스터

F

6

Floating-point accumulator register, 실수 연산을 지원하기 위해 있는 레지스터로 다른 레지스터와 다르게 48bits를 사용한다.

 

데이터포맷

 

SIC 머신의 데이터 형식에 48bit 부동 소수점 데이터 형식이 추가되었다. 부동소수점은 다음과 같은 형태를 같는다.

 

S(1)

지수, exponent(11)

소수, fraction(36)

 

S: 부호를 나타낸다. S=0 이면 양수, S=1이면 음수.

Exponent: 0과 2047 사이의 부호 없는 2진수다.

Fraction: 0과 1 사이의 값을 갖는다. 부동 소수점 수의 정규화를 위해 소수의 상위 비트는 반드시 1이어야 한다.

 

절대 값 = Fraction * x^(exp-1024)

0의 값은 모든 비트를 0으로 설정한다.

 

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

SIC는 주소를 지정하는 target address가 15 bits이고, 메모리 주소도 15bits로 전부 표현 가능했기 때문에 Direct Addressing과 Indexed Addressing으로 충분했다. 

 

SIC/XE 머신은 메모리 공간이 대폭 늘어났다(2^15 -> 2^20). 늘어난 메모리를 지원하기 위해 15 bits로 부족하게되었고, 2가지 옵션을 사용한다.

  1. 상대 주소 지정 방식을 사용한다.
  2. target address를 20bits로 늘린다.

 

지원하는 명령어 형식도 네 가지로 증가했다.

 

형식1(1바이트)

opcode만 사용하는 명령어다.

ex) FIX 명령어. F register(실수 저장)의 값을 정수로 변환해 A register에 저장한다.

OPCODE(8)



형식2(2바이트)

opcode와 2개의 레지스터 주소로 구성된다. 

ex) ADDR 명령어. ADDR T A, T register의 값과 A register의 값을 더해 A register에 저장한다.

OPCODE(8)

r1(4)

r2(4)



형식3(3바이트) (e=0)

opcode와 6개의 flag, disp로 구성된다. opcode가 6bits로 줄어들었다. 이것이 가능한 이유는 SIC 명령어에  맨 오른쪽에 사용하지 않는 2bits(항상 값이 0)가 존재하기 때문이다. 

 

형식3에서 이러한 2 bits는 n과 i flag를 나타내는 데 사용한다.

 

e=0이면 target address가 3형식을 따른다는 뜻이다.

 

x는 loop를 지원하기 위한 flag다.

 

12bits의 disp(변위)는 기준 address부터 얼마만큼 떨어진 address가 target address인지 알려준다.

 

 

OPCODE(6)          

n(1)

i(1)

x(1)

b(1)

p(1)

e(1)

disp(12)

 

형식 3을 위한 두 가지의 새로운 지정 방식이 생겨서 총 세 가지의 주소 지정 방식이 있다.

 

방식

표시

목표 주소 계산(Target address calculation)

Base relative mode 

b=1, p=0

TA = B 레지스터 + disp(0 ~ 4095)

PC relative mode

b=0, p=1

TA = PC 레지스터 + disp(-2048 ~ 2047)

Direct Mode

b=0, p=0

TA = disp



형식4(4바이트) (e=1)

target address를 20 bits로 늘려 사용하는 명령어다. 

 

e=1이면 target address가 4형식을 따른다는 뜻이다. 4형식에서는b, p는 사용하지 않음으로 0으로 설정된다.

 

여기서 n과 i의 값에 따라 사용하는 주소 지정 방식이 달라진다.

 

n=0, i=1이면 Immediate Addressing 방식을 사용한다. 이 방식은 target address가 주소값을 저장하지 않고, 실제 연산에 사용되는 값을 저장한다. 따라서 메모리 접근이 일어나지 않아 연산이 빠르다.

 

n=1, i=0이면 Indirect Addressing 방식을 사용한다. 이 방식은 target address가 저장되는 것이 아니라 target address가 저장된 메모리의 주소를 저장한다. 따라서 두 번의 메모리 접근이 일어나서 연산이 느리다.

 

n=0, i=0 or n=1, i=1이면 simple addressing 방식을 사용한다. 이 방식은 target address로 메모리에 접근해서 값을 가져온다.



OPCODE(6)          

n(1)

i(1)

x(1)

b(1)

p(1)

e(1)

address(20)

 

Immediate Addressing, Indirect Addressing 방식은 loop를 지원하지 않는다.

 

플래그에 따른 주소 지정 방식 요약

 

b=0, p=0, e=0 : 직접 주소 지정 방식 (Direct Mode)

b=1, p=0, e=0 : 베이스 레지스터 주소 지정 방식 (Base relative mode)

b=0, p=1, e=0 : 상대 주소 지정 방식 (Base relative mode)

 

b=0, p=0, e=1 : 직접 주소 지정 방식 (Direct Mode)

n=0, i=1 : 즉시 주소 지정 방식 (Immediate Addressing)

n=1, i=0 : 간접 주소 지정 방식 (Indirect Addressing)

n=0, i=0 : SIC 명령어 방식 

n=1, i=1 : SiC/XE에서 호환되는 SIC 명령어들



명령어 집합

Load&Store

레지스터가 추가됨에 따라 Load, Store 명령어들이 추가되었다.

LDB, STB 

 

Floating Point Arithmetic

float 연산이 가능해지면서 float의 사칙연산 명령어가 추가되었다. 

ADDF, SUBF, MULF, DIVF 

 

Register instruction

범용 레지스터가 생기면서 레지스터 간의 연산이 가능해졌다.

RMO, ADD, SUBR, MULR, DIVR

 

I/O

SIC/XE가 되면서 I/O Device에서 값을 입력받거나 입력하면서 동시에 연산도 진행하는 기술이 추가되었다.

SIO, TIO, HIO 

 

 

출처

 

https://repilria.tistory.com/185

https://limdongjin.github.io/system-programming/sp5-addressing.html#target-address-ta-%EA%B3%84%EC%82%B0%EC%9D%84-%EC%9C%84%ED%95%9C-mode

https://m.blog.naver.com/PostView.nhn?blogId=hycszero&logNo=70137554568&proxyReferer=https:%2F%2Fwww.google.com%2F

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

 

반응형

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

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

댓글