[System Programming #2] SIC & SIC/XE
앞 내용에서는 SIC에서 사용하는 기본적인 명령어와 레지스터를 정리하였다.
이제는 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에서는 예시를 들며 정리하고자 한다.
아 귀찮아