[시스템프로그래밍]가상컴퓨터 SIC

윰지·2021년 3월 11일
0

시스템프로그래밍

목록 보기
1/2

SIC과 SIC/XE란?


가상의 컴퓨터로 실제 컴퓨터 명령어를 단순화시켜 이해하기 쉽게 만들어 놓은 것이다. SIC은 8비트가 한 byte로 이루어져 있고 모든 주소는 byte로 표현되며 저장된다. 3bytes가 한 word로 이루어져 있으며 SIC의 전체 메모리는 2의 15승이다. SIC은 가상 컴퓨터의 standard 모델이고 SIC/XE는 확장된 모델이다.

Architecture of SIC


Registers
SIC은 특수한 목적을 가지는 레지스터가 5개가 존재하고 그 길이는 각각 24bit이다.

  1. A(0)
    일반적으로 사용되는 레지스터로 기본적인 산술 연산에 활용된다.
    -> Accumulator register
  2. X(1)
    주소를 저장하고 계산하는데 사용된다.
    -> Index register
  3. L(2)
    어떤 메모리로 점프할지, return할 주소는 어디인지 저장한다.
    -> Linkage register
  4. PC(8)
    다음 작업(명령)이 저장되는 곳이다.
    -> Program Counter register
  5. SW(9)
    컨디션 코드를 포함한 다양한 정보를 담고 있다.
    -> Status Word register

Instruction Formats and Addressing Mode
명령어 포멧은 24비트로 되어 있다. OPCODE는 8bit로 어떤 명령을 내릴 것인지를 나타낸다. X는 Index-Address mode를 나타내며, X=1이면 Indexed addressing mode로 동작하고 X=0이면 direct addressing mode로 동작한다. Direct address는 그 주소를 직접 사용하지만 Index address는 해당 주소에 index 레지스터의 값을 더한 것을 사용한다.(주소 + X)

Architecture of SIC/XE


Registers
5 registers as SIC + 4 additional ones(B, S, T and F)

  1. B(3)
    index를 붙여 사용되는 경우가 많다.
    -> Base register
  2. S(4) & T(5)
    데이터 저장만 할 수 있다. 산술 연산에 사용할 수 없다.
  3. F(6)
    48bits로 부동소수점을 위한 레지스터이다.
    -> Floating-point accumulator

Instruction Formats

  1. Format1
    No memory reference(1 byte)
  2. Format2
    No memory reference(2 bytes), for register operations
  3. Format3
    Relative addressing(3 bytes)
    Flag e = 0
6bits11111112
opcodenixbpeaddress
  1. Format4
    Address field extension to 20bits(4 bytes)
    Flag e = 1
6bits11111120
opcodenixbpeaddress

Addressing Mode

  • Base Relative Addressing
    • b = 1, p = 0
    • TA = (B) + disp/addr
  • PC Relative Addressing
    • b = 0, p = 1
    • TA = (PC) + disp/addr
  • Direct Addressing
    • b = p = 0
    • TA = disp/addr
  • Index Addressing
    • x = 1
    • TA = (X) + disp/addr
    • 다른 addressing mode와 결합할 수 있다.
  • Immediate Addressing
    • i = 1, n = 0
    • 메모리 reference를 하지 않는다.
    • disp/address 값을 주소 값으로 생각하지 않고 그 자체를 값으로 생각한다.
  • Indirect Addressing
    • i = 0, n = 1
    • TA를 간접 주소로 해석한다.(포인터 처럼)
  • Simple Addressing for SIC/XE
    • n = 1, i = 1
    • TA로 메모리에 접근해서 값을 가져온다.
  • Simple Addressing for SIC
    • n = 0, i = 0
    • b, p, e는 address field로 사용된다.

SIC 명령어


Load or Store instructions : LDA, LDX, STA, STX etc
LDA ALPHA : 데이터를 ALPHA에 가서(ALPHA의 주소로 가서) 값을 load하여 A 레지스터에 넣어라.
STA GAMMA : 데이터를 A 레지스터에 가서 값을 읽어 GAMMA에 store하라.

Integer Arithmetic operations : ADD, SUB, MUL, DIV
A 레지스터와 관련이 있고, A를 주어로 생각하고 해석하면 된다. A는 항상 생략되어 있다.
ADD ALPHA : A register <- A register + ALPHA
SUB BETA : A register <- A register - BETA
MUL GAMMA : A register <- A register * GAMMA
DIV DELTA : A register <- A register / DELTA

Comparision : COMP, TIX
COMP ALPHA : 비교되어 나온 값(크다, 작다, 같다)을 SW 레지스터의 condition code에 저장한다. 현재 A 레지스터에 들어있는 값과 ALPHA를 비교하여 CC(Condition Code)에 결과(<, =, >)를 저장한다. CC <- A register compare with ALPHA
TIX ALPHA: X에 1을 증가시킨 후, X가 가리키는 값과 ALPHA를 비교한다.

Conditional Jump : J, JLT, JEQ, JGT
CC에 따라 점프하는 명령어이다. JLT, JEQ, JGT는 조건에 따라 결정된다.
J ALPHA : CC에 관계없이 다음 명령인 PC에 ALPHA를 넣는다. PC <- ALPHA
JLT BETA : A 레지스터 값이 더 작다면(CC에 들어있는 값이 <) PC에 BETA를 저장한다. PC <- ALPHA if CC set to <
JEQ BETA : A 레지스터 값과 같다면(CC에 들어있는 값이 =) PC에 BETA를 저장한다. PC <- ALPHA if CC set to =
JGT BETA : A 레지스터 값이 더 크면(CC에 들어있는 값이 >) PC에 BETA를 저장한다. PC <- ALPHA if CC set to >

Subroutine linkage : JSUB, RSUB
JSUB READ : L 레지스터(return할 때 찾아갈 값 보관용)에 다음 할 명령이었던 PC를 저장하고 PC에 READ라는 서브루틴을 부른다. READ 명령들을 수행한 후 원래의 루틴으로 L 레지스터 값을 참조해 들어온다.
RSUB : return과 유사하다.

I/O(Input and Output)
Input과 Output은 한 번에 1바이트씩만 전송되며, A 레지스터의 마지막 1바이트를 사용한다. 모든 디바이스는 unique한 8비트의 코드가 부여된다.
TD INDEV : INDEV란 디바이스를 테스트해라. 이 결과는 CC에 저장되며, <(LT)면 device는 ready 상태, =(EQ)면 not ready 상태이다.
RD INDEV : 디바이스에서 1바이트를 읽어 A 레지스터 가장 마지막 1바이트에 저장하라.
WD INDEV : A 레지스터의 값을 내보내라.

0개의 댓글