본문 바로가기
시스템 프로그래밍

SIC/XE (SIC/eXtra Equipment)

by sepang 2021. 9. 12.

  이전 글에서는 컴퓨터의 기본 구조와 이를 쉽게 이해하기 위한 SIC 모델에 대해 알아봤다. 이번에는 SIC의 확장된 모델이며 상위 호환을 보장하는 SIC/XE에 대해서 알아보도록 하자. 상위 호환이기 때문에 이전 내용을 숙지해야 이해하는데 수월할 것 같다.


Memory

  기본적인 개념의 SIC와 동일하다. 하지만 SIC와 달리 SIC/XE에서는 사용가능한 최대 memory 크기는 1MB(2^20 bytes)이다.

Registers

  SIC에 있는 5개의 register에서 4개의 register가 추가되었다. 하나씩 알아보자.

  • B(3, Base register): addressing에 사용된다. (24 bits)
  • S(4), T(5): 특별한 용도가 없는 general working register이므로 자유롭게 사용가능하다. (24 bits)
  • F(6): 부동 소수점(floating-point) 계산에 사용된다. (48 bits)

Data Formats

 SIC와 동일한 data formats(integers와 characters)를 가지고 추가로 48-bit floating-point data type이 추가되었다.

Instruction Formats

  4가지의 명령어 형식을 가진다. 하나씩 살펴보자.

fig 1. instruction formats

Format 1

  memory를 참조하지 않는다. 피연산자가 없고 opcode만 존재. (1 byte)

Format 2

  memory를 참조하지 않는다. register operation을 위한 형식이다. r1, r2에는 register에 unique number가 들어간다. (2 bytes)

Format 3

  Relative addressing을 위한 형식이다. address field 크기가 12bits이다. 때문에 모든 memory 위치를 표시할 수 없다. (maximum available memory size는 2^20 bytes) flag e = 0 (3 bytes)

Format 4

  Address field의 size가 20 bits로 확장됐다. 때문에 모든 address를 표현할 수 있다. flag e = 1 (4 bytes)

Format 3, 4에서 n, i, x, b, p, e field를 볼 수 있다. 이들은 flag bits들이며 뒤에서 이들의 쓰임을 알 수 있을 것이다.

 

Addressing mode

Relative addressing modes for Format 3

  • Base relative addressing, b=1, p=0: TA = (B) + disp/addr
  • PC relative addressing, b=0, p=1: TA = (PC) + disp/addr

  정리해보자. Base relative addressing은 flag bits의 b=1, p=0일때 동작하고 TA(target address)는 B register의 값에 address field의 값을 더한 값이 된다. PC relative addressing은 b=0, p=1일때 동작하고 PC register 값에 address field 값을 더한 값이 TA가 된다.

Direct addressing mode for Format 3&4

  • b=p=0, TA = disp/addr

  address field의 값이 TA가 된다. 참고로 b=p=1은 impossible이다.

Indexed addressing

  x=1일 때, 이 addressing modes들은 indexed addressing 모드와 결합할 수 있다. 이 경우에는 (X)의 값이 TA 계산에 더해진다. 예를 들어 b=1, p=0, x=1이면 TA = (B) + disp/addr + (X)가 된다.

n&i bits in Format 3 and 4

  format 3, 4에서 n과 i bits는 TA가 사용되는 방식을 정하는데 사용된다.

  • n=0, i=1: immediate addressing, memory 참조가 없고 TA가 operand value로 사용된다.
  • n=1, i=0: indirect addressing, pointer개념과 유사하다 TA는 operand value가 있는 주소값으로 사용된다.
  • n=0, i=0: SIC의 simple addressing으로 사용된다. 그래서 b, p, e fields는 address field에 추가적으로 사용된다(12 bits -> 15 bits). 때문에 SIC와 상위호환이 가능하다.
  • n=1, i=1: SIC/XE의 simple addressing으로 사용된다.

※ indexingimmediate나 indirect addressing mode와 같이 사용될 수 없다. 이때의 addressing field에는 주소값이 들어가는게 아니라 당연하다.

Example

fig 2. example

  예시로 이해해보자. HEX는 instruction을 16진수로 표현한 것이다. 이를 이진수로 변환하여 format에 맞춰 쪼개보면 각 op, n, i, x, b, p, e, disp/addr값을 알아낼 수 있다.

  첫번째 instruction만 한 번 해석해보자. 참고로 opcode가 '000000'이면 LDA 명령이다. 다른 opcode에 대해 알고 싶다면 instruction set를 참고하자. 우선 n=i=1이므로 SIC/XE의 simple addressing을 사용한다. e=0이므로 relative addressing사용, x=0이므로 indexed addressing은 사용하지 않는다. 또, b=0, p=1이므로 PC relative addressing을 사용한다. dis/addr field를 다시 16진수로 바꾸어보면 '360'이다. 때문에 TA = (PC) + disp/addr = 3000 + 600 = 3600이다. 3600 주소값을 가지는 곳에는 '103000'이라는 값이 있다. 그러므로 register A에 실리는 값은 103000임을 알 수 있다. 나머지도 한번 시도해보자.

 

Instruction Set

상위호환이니 SIC의 instruction 모두 사용가능하다. 추가로 더 살펴보자. instruction set 에서 모든 instruction의 자세한 정보를 확인할 수 있으니 참고하자.

Load & Store register: LDB, STB, etc

  LDA와 STA와 비슷하다. A register가 아니라 B register로 바꿔 생각하자.

Floating-point arithmetic operations: ADDF, SUBF, MULF, DIVF

  형식은 4가지 다 동일하다. ADDF로 예를 들면 ADDF m ? F <- (F)+(m...m+5)이다. F register에 F register의 값과 실수값(6bytes)들 더한 값을 넣어준다.

Register-to-Register instruction: RMO, ADDR, SUBR, MULR, DIVR

  register들을 이용한 instruction이다. 이제 밑의 기호를 보면 어떤 instruction인지 짐작이 된다.

  • RMO r1, r2 ? r2 <- (r1)
  • ADDR r1, r2 ? r2 <- (r2) + (r1)

Supervisor call: SVC

  'SVC n'의 형태를 가진다. n은 supervisor call number(i.e. interrupt number)다. Supervisor call에 대해 먼저 알아야한다. 어떤 프로그램이 돌아갈 때 이는 OS 위에서 돌아가니깐 당연히 OS의 자원을 사용해야 하는 경우가 있을 것이다. 때문에 소스 코드를 읽으며 내려가다가(= instruction을 순서대로 읽음) SVC instruction이 있다면 n값에 해당하는 interrupt가 발생하여 OS에서 이를 수행하고 끝나면 다시 interrupt 다음 코드로 돌아온다.

Input and Output

  SIC의 I/O instructions들을 사용가능하다. 여기에 추가로 SIC/XE에는 CPU가 다른 instructions을 수행하고 있을 때 I/O 작업을 수행하는 I/O channels가 있다. 이를 통해 computing과 I/O가 동시에 수행가능해지므로 더 효율적인 system operation이 가능하다. 종류로는 SIO(start), TIO(test), HIO(halt)가 있다.

 

Assembly Language Statements

3가지 유형의 functional statements가 있다.

  • Instructions: 어셈블러가 런타임에 실행될 하나이상의 object code(기계어 코드)로 변환한다. 각 instruction은 작업들 중 하나에 해당된다.
  • Directives: 어셈블러에게 어떤 행동을 하도록 한다. 이는 object code에는 영향을 미치지 않느다. 예를 들어 WORD directives는 one-word 크기의 integer 상수를 생성한다.
  • Macro: 다른 statements의 sequence의 줄임말이라고 생각하면 될 것 같다. 해당 매크로를 나타내는 구문으로 확장하여 이것을 붙인다. 함수와는 다른 느낌이다. 함수는 코드의 흐름이 바뀌지만 이는 해당 구문이 다른 걸로 대체되는 것이다.

 

Actual Machine Architecture

  실제 Machine Architecture의 두가지 유형을 알아보자.

CISC (Complex Instruction Set Computers)

  • 크고 복잡한 instruction set들이 제공된다.
  • 몇몇개의 다른 instruction 형식과 길이를 가진다.
  • 다양한 addressing modes가 있다.
  • 위처럼 '크다, 다양하다' 같은 특징 때문에 H/W로 구현하기 복잡하지만 assembly program 개발에는 용이하다.

RISC (Reduced Instruction Set Computers)

  • 적은 수의 machine instructions, instruction formats, addressing modes
  • 표준적이고 고정된 길이의 instruction 길이와 single-cycle execution
  • 장단점은 CISC와 반대라고 생각하면 된다. 장점으로는 H/W 설계 간단, 빠르고 덜 비싸게 processor 개발이 가능, 높은 신뢰성, 빠른 instruction 실행 시간 등이 있다.
  • 반대로 간단한 것들로 복잡한 것을 구현해야 하므로 assembly program을 개발하는 과정은 복잡하다.

 


이미지 출처

fig 1 / BJK / https://velog.io/@kbj7227/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-Chapter.-1-Background

자료 출처

  • Adam Hoover, “System Programming with C and Unix, Addison Wesley 2010.
  • Abraham Silberschatz, Peter Baer Galvin, and Greg Gagne, “Operating System Concepts (10th Edition), Wiley 201

'시스템 프로그래밍' 카테고리의 다른 글

Assemblers (4)  (0) 2021.10.15
Assemblers (3)  (0) 2021.10.15
Assemblers (2)  (0) 2021.10.14
Assemblers (1)  (0) 2021.09.28
SIC (Simplified Instructional Computer)  (0) 2021.09.09

댓글