System Programming

[System Programming #2] SIC & SIC/XE

qbinee 2022. 4. 5. 13:14

앞 내용에서는 SIC에서 사용하는 기본적인 명령어와 레지스터를 정리하였다.

https://sdhg12.tistory.com/4

이제는 SIC 및 SIC/XE의 규칙에 관하여 정리할 예정이다.

 

[Data Format]

  • integer 24bit binary number로 저장된다.
  • Charactersms 8 bits의 아스키코드로 저장된다.
  • 소수점은 x

SIC

[Machine Instruction Format For SIC]

#1에서 설명했듯 SIC에서는 24bits의 instruction set을 쓴다.을쓴다.

이 포맷 내에서 주소를 지정하는 방법(Addressing Mode)을 고를 수 있다.

주소를 알아야 메모리에 담겨있는 명령을 수행할 수 있지 않을까,,

따라서 이런 주소를 지정하는 방법에는 여러 가지 방법이 있는데 이를 설명하고자 한다

 

[Direct addressing mode] x=0

- 그냥 대놓고 주소를 알려주는 방법이다. address에 적혀있는 hex를 보고 주소를 따라가자

 

[indexed addressing mode] x=1

  • 위 그림에서 x=1일 때 해당 모드임을 인지한다
  • register x 값 + address 위치 = 가리키는 주소 위치 ( 위 그림의 X는 register x가 아니다)
  • 모두 Hex값임을 인지하자

SIX/XE

[Machine Instruction Format For SIC/XE]

  • 위 설명한 SIC 보다는 더 많은 기능을 지원한다. 따라서 더 많은 format  더 많은 레지스터를 지원한다.

 

SIC/XE 4가지 포맷을 지원한다.

 

[Format 1]

- 메모리 위치를 나타내는 게 없음,, 그냥 그 자체다..

예시를 보자

Mnemonic Format Opcode Errect note

 

Mnemonic을 보면 주소를 가리키는 게 없다.

 

[Format 2]

- 이것도 메모리 위치를 가리키는 정보가 없다 오직 레지스터의 정보만을 이용한다.

예시

- r1 레지스터와 r2 레지스터를 비교한다고 한다. 해당 결과값이 비교된 후 비교 결과는 cc cc에 저장됨

 

나머지 포맷은 flag  e의 값으로 구분한다.

 

Flag e=0

[Format 3] : Relative addressing( 3byte )

- 아마 제일 많은 포맷인 것 같다

 

- Opcode + n+ i를 묶어서 확인하고

- xbpe를 묶어서 생각하면 편하다.

- 이걸 알고 16진수 변환을 생각해야 뒤에 코드를 보며 왜 그런  object code가 나오는지 알 수 있다. 뒤에 나오기 때문에,, 상세히는 뒤에서 설명한다

- object code로는 6자리 16진수로 나타난다. Ex. 17202D

 

flag e=1

[Format 4] : Address field extension to 20 bits

- 너ㅓㅓ어무 주소 나타낼게 많을 때 쓴다.

 

이렇게 많은 명령어를 해독하는 포맷이 저장되어 있고,,,,! 이제는 주소 값을 어떻게 읽을 것인가를 판별할 것이다.

 

왜 이렇게 나눠서 주소를 읽는 법을 나타내냐면

직접 메모리에 적재하고 싶지 않아서 이다. 그냥 바로 쓸 값인데 굳이 적재할 이유가 있나? 해서 나눠놓은 것 같다.


[Addressing Mode]

1. Relative addressing

- 주소를 상대적으로 나타내기 위해

 

TargetAddress = displacement + 레지스터 PC / B (base)

 

여기서 Target Address를 나타내기 위한 레지스터가 2가지가 있는데

보통 PC( programm counter )는 고정값으로 3씩 증가한다.

근데 이거를 프로그래머가 제멋대로 바꾸고 싶어 하시는 분 덕분에 설정할 수 있는 B가 생겼다.

 

따라서

1. Base relative addressing  b=1 & p =0

2. PC relative addresssing b=0 & p=1

 

2. Direct addressing b =0 & p=0

- 직접적으로 나타내는 거 여기가 주소

 

TargetAddress = displacement

 

즉, Relative와 Direct는 b / p로 구분함으로써 address를 확인하는 방법을 구분해 놓을 것이다.

 

3. immediate addressing i =1, n=0

  • 즉시 뒤의 주소 값을 operand값으로 사용하는 경우,,

예시로는

LDX #3을 operand code로 나타내면 (operand)(x) 003으로 나타나게 될 것이다 ( hex )

 

4. Indirect addressing i=0 , n=1

- address 위치에 있는 값을 사용하는 것이 아닌 해당 위치의 값 또한 주소 값이다.

 

5. Simple addressing for SIC  i=0, n=0

  • 위에서 설명한 SIC을 사용

6. Simple addressing for SIC/XE

  • Format 2 참고

 

 

 

 

따라서 위와 같이 SIC 그리고 SIC/XE의 operand code로의 변환을 위해 구조를 이해하는 것을 정리하였다.

 

아마 다음 #3에서는 예시를 들며 정리하고자 한다.

 

아 귀찮아