※ 본 글은 아래 'System Software 3rd Edition을 기반으로 작성되었습니다.

SIC 머신이란?
SIC머신은 Simplified Instructional Computer로 교육용으로 설계된 가상의 컴퓨터 시스템이다.
컴퓨터 아키텍처와 어셈블리 프로그래밍을 학습하기 위한 목적으로 사용되며, 간단한 구조와 명령어 셋을 가지고 있어 기초적인 시스템 설계 및 기계어 프로그래밍을 배우는 데 유용하다.
SIC 머신의 메모리 구조
- 1byte = 8bit : 8bit가 1byte라는것은 진리
- 1word = 3byte : SIC머신에서는 1word의 크기를 3byte로 지정한다. 다른 시스템과 다르니 4byte로 착각하지 말자.
- 2^15 Mem Size : 2^15개(32KB) 크기의 메모리 사이즈를 가진다.
SIC 머신의 레지스터 구조
SIC 머신은 5개의 레지스터를 가진다.
Mnemonic | Number | Special Use |
A | 0 | Accumlator : 연산을 수행하는 기본 레지스터 (1WORD) |
X | 1 | indeX register : 주소계산 및 인덱싱에 사용 (1WORD) |
L | 2 | Linkage register : 서브루틴 호출과 관련된 작업에 사용 (1WORD) |
PC | 8 | Program Counter : 다음 명령어의 주소값을 저장 (1WORD) |
SW | 9 | Status Word : 프로그램 실행 중 조건 코드(Condition Code)와 인터럽트 상태 등의 정보를 저장하는 레지스터. Flag(Zero, Signed, Carry, Overflow) 정보를 저장한다.(1WORD) |
SIC 머신의 데이터 구조
- Integer : 24bit의 binary number
○ 2's complement
○ -2^23 ~ 2^23-1 - Character : 8bit ASCII code
- Floating point 지원 X
SIC 머신의 명령어 구조
모든 명령어는 고정된 24bit(1word) 명령어 형식을 가진다.
- Opcode - First 8 bits
- Index Code - Next bit
- Address - Last 15bits
Opcode(8bits) | x(1bit) | address(15bits) |
※ X reg가 1이면 인덱스 레지스터(X)의 값이 주소에 추가된다.
- X = 0 → TargetAddress = Address
- X = 1 → TargetAddress = Address + (X)
SIC 머신의 입출력 방식
- 입출력 연산은 장치 번호를 이용하여 수행됨
- RD (Read) 및 WD (Write) 명령어를 통해 특정 장치에서 데이터를 읽거나 씀
SIC 머신의 한계
- 하드웨어 기능이 제한적이며 부동소수점 연산이 지원되지 않음
- 레지스터 개수가 적어 복잡한 연산을 수행하기 어려움
- 즉시 주소 지정(#)과 상대 주소 지정이 지원되지 않음
- 서브루틴 호출을 위해 명령어를 수동으로 저장하고 복구해야 함
SIC/XE 머신이란?
SIC/XE는 SIC의 확장판으로 더 많은 기능을 포함한다.
SIC/XE 머신의 메모리 구조
- 2^20(1MB) 크기의 메모리 : 메모리의 크기가 2^15에서 2^20으로 증가하였다.
SIC/XE 머신의 레지스터 구조
SIC머신의 레지스터 구조에서 추가적인 레지스터가 추가되었다.
Mnemonic | Number | Special Use |
B | 3 | Base register : Base relative addressing을 할때 사용된다. (1WORD) |
S | 4 | General working register (1WORD) |
T | 5 | General working register (1WORD) |
F | 6 | Floating-point accumulator : 부동소수점 연산시 사용 (2WORD) |
SIC/XE 머신의 데이터 구조
- Floating-point data type이 추가 되었다.
SIC/XE 머신의 명령어 구조
두가지의 옵션이 생겼다.
- 상대주소(relative addressing) 사용
- 20bits로 확장된 절대주소 사용
● Format 1 (1byte)
opcode(8) |
● Format 2 (2byte)
opcode(8) | r1(4) | r2(4) |
● Format 3 (3byte) (e=0)
opcode(6) | n(1) | i(1) | x(1) | b(1) | p(1) | e(1) | disp(12) |
● Format 4 (4byte) (e=1)
opcode(6) | n(1) | i(1) | x(1) | b(1) | p(1) | e(1) | disp(20) |
e = 0일때 → Format 3 :
b = 1 이면 base relative, p = 1이면 pc relative, b=0 & p=0이면 direct addressing이다. 둘다 1인경우는 없음.
※ Base relative는 Base에서 양수만큼만 이동 가능하지만, PC relative는 양,음수의 범위로 이동 가능하다.
Mode | Indication | Target address calculation |
Base relative PC relative |
b = 1, p = 0 b = 0, p = 1 |
TA = (B) + disp (0<= disp <= 4095 (2^12-1)) TA = (PC) + disp (-2048(2^11) <= disp <= 2047 (2^11-1)) |
Direct mode | b = 0, p = 0 | TA = disp |
e = 1일때 → Format 4 :
b = 0, p = 0만 존재하며 확장된 직접주소(20bits)를 가진다.
※ x = 1일때는 X reg 값도 더해준다.
- n = 0, i = 1 : Immediate addressing
메모리 레퍼런스 없이 target address가 operand의 값으로 사용된다. - n = 1, i = 0 : iNdirect addressing
메모리 레퍼런스가 사용되므로 타깃 주소의 값이 사용된다. - n = 0, i = 0 : simple addressing
n과 i가 모두 0이면 SIC머신이다. 주의할 점은 SIC머신은 하위 15bits를 직접주소로 사용하므로 b, p, e레지스터로 해석하면 안되고 해당 비트들도 주소계산시에 사용해야한다.
ex) opcode ni xbpedisp
0000 0000 0011 0110 0000 0000
다음과 같이 주어졌을 때 n=i=0이므로 15bits를 주소로 해석해야하지 p = 1이므로 PC relative하다로 해석하면 안된다. - n = 1, i = 1 : simple addressing
n과 i가 1일 때에는 SIC/XE머신임
b=1, p=1, e=0/1 여부에 따라 Base-Relative, PC-Relative, Extended Addressing 등이 결정됨