본문 바로가기
System Programming

[System Programming #1] Basic System Programming

by qbinee 2022. 4. 3.

[글을 시작하며]

일단은, 각 레지스터 정리 및 앞으로의 성찰을 적고자한다.

 

먼저 과제 3번인 SIC으로 스택 구현하기는 성공하지 못했다.

 

아무래도 추후에 쓸일이 없는 Sixtool 이니까,, 스택 구현하기는 하지 않기로 했다

 

다만, 주로 쓰이는 명령어 및 기본 개념을 정리하기로 마음 먹었다.


[SIC Machine Architecture]

1. 일반적인 Memory 구조

- 2차원 배열 구조인데 각 주소값을 가지는 걸로 이루어져있다

- cell 이라고 명하는 고정된 값으로 이루어져있다.

- 주소를 이용하면 빠르게 해당 메모리로 이용할 수 있다.

-> 단 , SIC 메모리는 8bit = 1byte ; 3 bytes = word 로 이루어져있다.

-> 가용 메모리 범위는 32kb이다. (2^15 bytes)

 

2. 각 레지스터 개념

- 이 개념을 명확히 익혀놔야 연산을 하거나 데이터를 넣고 뺼 때 알 수 있다.

- A : 연산을 위한 ( Accumulator )

- X : index 값을 저장하기 위한

- L : 특정한 address로 jumping 하기 위해 address 저장

- PC : 다음 address 위치를 가리키는 레지스터

- SW : cc 값 또는 conditional jump를 위해 있는 레지스터

* cc (condition code): comp(if문 같은거)같은 명령어를 상용했을때, 해당 true or < or > 값에 대한 T/F값을 저장

 

3. Machine Instruction Formats

모든 instruction은 기본적으로 24bit format ( 3bytes = 1word ) 구조를 가진다

이때 저 3개의 구조들의 조합으로 어떤 Mode인지 판단이 이루어진다.

 1. x =1 

Target Address = address + (X*)

* X : X 레지스터 값의 value를 더한 값이다. 위의 x(소문자) 아님

 

 2. x =0

Target Address = address

 

4. Basic set of instruction

- 이걸 열심히 이해하고 코딩했어야는데 무작정 했더니 모든게 꼬여버렸다.

다음부터는 이론을 명확히 익히고 과제할 것,,

<시작>

LDA m : memory location 이 .. M,m+1,m+2 까지 3byte값을 (1 word)를 레지스터A 에 Load 시킨다

 

STA m : A 에 담겨있는 값을 m이 있는 위치에 저장한다.

<연산 operations>

ADD m : 위의 개념을 이용하여 A 레지스터 내부에서 m의 address 위치의 값을 가져와 덧셈 연산을 한다

 

SUB  m : // 뺄셈 연산

 

MUL m : 곱하기 연산

 

DIV m : 나누기 연산

 

<비교 operations>

COMP m : 레지스터 a에 있는 값과 비교한다. 이를 cc ( conditional code ) 에 (< = >)를 확인한다.

 

JLT , JEQ, JGT m :  m값보다 작은경우, 같은경우, 큰경우 -> 각 conditional jump 진행

* conditional jump 란, ex) JLT m

COMP를 통하여 판단한 < = > 값들에 대해 각 결과값을 m으로 Mapping 시켜준다.

 

 

<Subroutine linkage >

  • Return 개념을 생각하면 쉬움 (RSUB)
  • 함수 호출시 호출된 위치의 address를 기억하고 함수로 JUMP 시킴 (JSUB 한정) 이때 기억하는 과정은 레지스터 L에 마지막 위치를 저장하는 방식이용
  • 함수 호출시 호출된 위치의 address는 기억하지 않는다 ( J )
  • J 사용시에는 RSUB 사용시 저장된 L값으로 리턴한다.

 

< INPUT / OUTPUT >

  • 시간당 1 byte 씩만 레지스터 A에 전송한다. 가장 맨 오른쪽 8 bits(1 byte)
  • 이정도면 레지스터A는 극한직업이 아닐까,,
  • 각 디바이스는 unique코드를 부여해야한다.

 

 

[SIC/XE Machine Architecture]

1. 메모리 구조

- 한계점 : 1mb

2. 추가적인 레지스터

B : addressing 을 사용하기 위해

S , T : 따로 연산작업 등으로 사용하는것이 아닌 그냥 register값을 이용함

F : 소수점 연산 지원

 

 

 

 

'System Programming' 카테고리의 다른 글

[System Programming #2] SIC & SIC/XE  (2) 2022.04.05