시소프 3,4일차

OneTwoThree·2022년 12월 27일

레지스터 종류

A 레지스터 : Accumulator register
계산할 때 사용한다. 명령어에 레지스터 지정이 없으면 기본적으로 A 레지스터이다.

X 레지스터 : indeX register
a[0] a[1] 과 같이 인덱스를 가리키기 위해 사용하는 레지스터이다.

L 레지스터 : Linkage register
점프 후에 원래 주소로 돌아오기 위해 사용한다.
점프하는 과정에서 L 레지스터에 원래 다음에 수행하려고 했던 주소를 저장한다.

PC 레지스터 : Program Counter
다음에 실행할 명령어의 주소를 저장함

SW 레지스터 : Status Word register
비교 결과값이 저장됨. tix나 comp의 결과

SIC 명령어들

LDA ALPHA
ALPHA의 값을 A 레지스터에 LOAD 한다

STA GAMMA
변수 GAMMA에 A 레지스터의 값을 STORE 한다

LDCH ALPHA
LOAD CHARACTER가 LDCH인데 어떤 레지스터를 대상으로 하는지 모른다. 이럴 때는 항상 A 레지스터다.
즉 A 레지스터에 ALPHA 값을 LOAD한다.
ALPHA값은 BYTE 크기이고 A 레지스터는 3BYTE = 1WORD 크기이다.
따라서 A 레지스터의 맨 오른쪽 BYTE에 ALPHA 값이 저장된다.

STCH GAMMA
마찬가지로 ST 연산에 대해 레지스터에 대한 언급이 없으므로
A 레지스터의 값을 GAMMA 변수에 할당한다.
A 레지스터는 3BYTE 이므로 맨 오른쪽 BYTE 값을 GAMMA에 할당한다.

X 레지스터를 활용할 수 있다
LDCH ALPHA,X : A 레지스터에 ALPHA[X]를 LOAD한다
STCH GAMMA,X : GAMMA 변수에 A레지스터[X]를 LOAD한다


COMP ALPHA
A 레지스터 값과 ALPHA를 비교한다. 비교 결과는 SW 레지스터의 CC에 저장된다.

TIX ALPHA
X 레지스터의 값을 1 증가시키고 ALPHA와 비교해서 비교 결과를 SW 레지스터에 저장한다.

JLT, JGT, JEQ
조건부로 JUMP한다.

JSUB READ
서브루틴인 READ로 JUMP한다.
L <- PC : 점프 후 돌아오기 위해 L 레지스터에 PC 값 넣는다
PC <- READ : 다음에 실행할 명령인 PC를 READ로 설정한다

RSUB
점프 후 돌아온다.
PC <- L : 다음에 실행할 명령을 L 레지스터 값으로 설정한다.

TD INDEV
INDEV는 디바이스 이름이다.
INDEV 디바이스를 TEST DEVICE (사용 가능한지 확인) 한다.
확인 결과는 CC에 저장된다.
사용 가능하면 < , 사용 불가능하면 =


DEVICE에서 읽고 쓰는 연산은 무조건 1BYTE 단위이다.

RD INDEV
INDEV의 값 1BYTE를 A 레지스터의 맨 오른쪽 BYTE에 저장한다.

WD INDEV
A 레지스터의 맨 오른쪽 1BYTE값을 읽어서 INDEV에 저장한다.


저장공간

BYTE : 문자 혹은 16진수 상수
WORD : 한 워드 정수 상수 (3BYTE)
RESB : 지정해준 수 만큼의 바이트 예약 (변수)
RESW : 지정해준 수 만큼의 워드 예약 (변수)


어셈블러

어셈블러는 2 Pass 알고리즘 사용
Pass 1 : symbol table 을 만듬
Pass 2 : machine code 를 만듬 (OBJCODE)

SYMBOL TABLE
symbol
라벨값
value
시작 주소
flag
COPY 1000
FIRST 1000
CLOOP 1003


OPTABLE
Mnemonic code length
STL 14 3
JSUB 48 3
LDA 00 3

OPTABLE은 컴퓨터에 저장되어 있는 것이다
JSUB라는 명령어는 48이라는 코드값을 가지고 길이는 3이다.

LOCCTR은 변수로 SYMBOL TABLE을 만드는 과정에서 현재 주소를 저장하기 위해 사용함

SYMBOL TABLE을 만들고 나서 OBJCODE를 만듬

  1. mnemonic operation code를 동등한 기계어로 전환

  2. symbolic operand를 동일한 기계 주소로 전환
    1000 FIRST STL RETADR
    STL의 OPTABLE의 CODE값 : 14
    피연산자인 RETADR의 SYMBOLTABLE의 VALUE : 1033
    따라서 OBJCODE : 141033

  3. 원시 프로그램에 나타난 데이터 상수를 기계 내부 표현으로 전환
    C'EOF' -> 454F46
    아스키코드값에 따라 바꾼다

  4. 목적 프로그램과 어셈블러 리스트를 작성

  • 목적 프로그램 : OBJCODE
  • 어셈블러 리스트
    헤더, 텍스트, 엔드로 구성

H 헤더
프로그램 이름, 목적 프로그램의 시작주소, 바이트로 나타낸 목적 프로그램 길이(16진수)

T 텍스트
목적 코드 시작 주소 , 바이트로 나타낸 이 레코드의 길이(16진수) , 16진수로 나타낸 OBJCODE

E 엔드
목적 프로그램 시작 주소(16진수)

16진수는 1 자리당 4bit를 나타냄

SIC/XE

SIC/XE는 SIC의 확장형임

  • 메모리 크기 2^15 -> 2^20
  • 레지스터 B,S,T,F 추가
  • 부동소수 데이터 형식 추가
  • 명령어 형식 4가지로 변화
  • 주소 지정 방식 변화
    SIC는 직접, 인덱스 주소 지정 방식만 지원
    SIC/XE는 베이스와 PC를 기반으로 상대 주소 지정 방식 지원
    즉시 주소 지정, 간접 주소 지정 지원
    레지스터 TO 레지스터 명령어 지원

주소 지정 방식


위가 포멧 3, 아래가 포멧 4

확장형 (포멧4) : 메모리를 참조하는 명령어가 포멧 3이 수용되지 않을 정도로 길면 포멧 4 사용
명령어 앞에 +를 붙여야함

즉시 주소 지정 방식
#를 붙임
피연산자를 명령어에 포함시킴
즉 상수를 선언해놓고 참조하는 방식이 아닌 명령어에서 바로 상수값 사용 가능

간접 주소 지정 방식
@를 붙임
추가적인 명령어 사용을 피할 수 있음

0개의 댓글