16비트 컴퓨터를 설계하는 과정은 O개의 포스팅으로 나눴다.
포스팅1 : 16비트 컴퓨터를 설계하려면?
포스팅2 : 내부 레지스터 정의
포스팅3 : 명령어 집합 정의
포스팅4 : Control Unit 설계하기
포스팅n : 미정
지금은 포스팅1이다.
16비트 컴퓨터를 설계하려면 어떤 과정을 거쳐야 하는지 전반적인 틀만 살펴보자.
컴퓨터를 설계하려면 컴퓨터 구조를 알아야겠지?
컴퓨터의 구조는 무엇으로 정의될까?
ⓐ 내부 레지스터
- 사용할 하드웨어 자원을 정의하기
ⓑ instruction set
- 가능한 명령어 집합을 정의하기
ⓒ control unit
- 정의된 명령어들이 하드웨어 리소스상에서 제대로 작동하게끔 설계하기
위 세가지를 정의하고 설계해야 컴퓨터가 이루어진다.
그런데 일단 위의 ⓐ, ⓑ, ⓒ를 공부하기 전에 알고 가야 할 것이 있다.
컴퓨터는 명령어를 수행하는 기계다. 그렇기에 기본적으로 명령어를 구성하는 비트의 형식을 짚고 넘어가자.
일단 그게 이번 포스팅의 전부다.
Instruction Codes
Instruction Codes의 구조를 알아보자.
(memory-reference instruction 코드 기준이다. 다른 명령어의 구조를 더 보고싶으면
[컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기)
Instruction codes = operation code (Opcode) + address part
조금 더 풀어서 쓰면,
명령어 코드 = 연산방법 선택하는 코드 + 피연산자의 주소부분
그리고 address part에 들어오는 값을 해석하는 방법은 addressing mode에 따라 달라진다.
아래 구조를 보자. (어디까지나 항상 16bit 컴퓨터 기준이다.)
- 최상위 비트 하나는 addressig mode를 결정한다.
- 그 다음 비트 세개로 연산방법이 결정된다.
- 그 다음 비트 열두개로 피연산자(operand)의 주소정보가 담긴다.
- Opcode 자리에 들어오는 값(비트)을 통해 연산방법을 지정한다. 즉, 어떤 operation을 수행할지에 대한 정보다.
- Address part 자리에 들어오는 값은, 연산에 사용될 피연산자(operand)가 존재하는 주소 정보가 담겨있다.
이렇게, operation code와 address part에 대한 비트 정보들이 합쳐지면 '명령어' 코드가 된다.
■ Addressing modes
저기 명령어구조에 '주소모드'라고 적어두었는데, 이게 뭐냐면, Address part에 들어있는 비트들을 어떻게 해석해야 하는지에 대한 모드다. 16비트인 Basic Computer에서는 단 두가지 Addressing modes만을 지원한다.
- 0일 경우, direct addressing : operand = M[address]
> 즉, Address의 비트들은 피연산자가 들어있는 메모리의 주소를 나타낸다.
> C언어에서의 *p 개념
- 1일 경우, indirect addressing : operand = M[M[address]]
> 즉, Address의 비트들은 피연산자가 들어있는 메모리 주소를 가리키는 메모리 주소를 나타낸다.
> C언에에서의 **p개념
16비트 Basic컴퓨터에서는 이 두가지 주소모드만 지원하지만, 일반적인 컴퓨터에서는 이런 주소모드가 수십가지로 존재한다. 그러나 16비트 컴퓨터에서는 indirect, direct만 알면 된다. 그것만 지원하니까.
여기까지 읽었으면 Inctruction code의 큰 구조에 대해서는 이해한 것이다.
Instruction Code 예시
Instruction code를 더 잘 이해하기 위해 예시를 보고 가자.
(memory-reference instruction 코드 기준이다. 다른 명령어의 구조를 더 보고싶으면
[컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기)
Instruction code 예시인 동시에 Addressing mode 예시다.
다음 그림은 Addressing mode 두가지 예시를 보여준다.
cf. Mano의 컴퓨터시스템 구조 책에 나온 예시로 알고있다. 그림은 갠적으로 다시 그렸고..
왼쪽 상황만 간단히 설명하고 넘어가겠다. 오른쪽도 같은 개념인데 번지를 한번 더 찾아가는 것이다.
- 22번지에 명령어 코드가 있다. direct주소 모드로 ADD연산을 수행하자는 명령어다.
- 명령어의 주소부분에 적힌 값인 457은 operand가 있는 주소다. (direct 모드이므로)
- 457번지로 가면 operand가 있다.
* 참고로, Basic 컴퓨터는 Accumulator(AC, 누산기)라는 특수한 레지스터를 사용한다. AC를 중심으로 모든 operation을 수행한다. 예를 들면 ADD연산을 한다고 하자. 그러면 현재 AC 레지스터 값과 operand값을 ADD해서 AC안에 넣는다. 이런 식으로 모든 연산이 AC를 기반으로 수행된다. 옛날에 사용되던, 그 초기의 컴퓨터가 이렇게 AC를 적극활용한다. (Accumulator based Computer)
이번 포스팅 내용
- 명령어 코드가 어떻게 구성되어있는지 확인했다.
- 명령어 코드 = 연산방법을 결정하는 비트 + 피연산자의 주소 관련 비트
- Addressing모드 2가지를 확인함 (16비트 컴퓨터에서)
+++++이 포스팅에서는 instruction code의 일부 내용만 정리했다.
사실 instruction의 종류는 세가지가 있다.
다음 포스팅을 읽고 instruction code에 대한 지식을 더 굳건히 하길 바란다.
[컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기
다음 포스팅부터는 본격적으로 '컴퓨터 구조'를 정의하는 세가지를 차례대로 살펴볼 것이다.
ⓐ 내부 레지스터 - 사용할 하드웨어 자원을 정의하기
ⓑ instruction set - 가능한 명령어 집합을 정의하기
ⓒ control unit - 정의된 명령어들이 하드웨어 리소스상에서 제대로 작동하게끔 설계하기
위 세가지를 정의하고 설계해야 컴퓨터가 이루어진다.
차례대로 알아가자. 그리고 16비트 컴퓨터 구조를 이해해보자.
그럼 32비트, 64비트로 확장가능한 지식이 생기게 된다.
'컴퓨터구조 & OS' 카테고리의 다른 글
[컴퓨터구조] 16비트 컴퓨터를 설계하자 - Instruction set 정의하기 (0) | 2021.10.13 |
---|---|
[컴퓨터구조] 16비트 컴퓨터 설계하기 - 레지스터를 정의하자 (0) | 2021.10.13 |
[컴퓨터구조] Shift Micro-operations | 컴퓨터의 shift 연산 구조 | 하드웨어 (2) | 2021.10.12 |
[컴퓨터구조] Logic Micro-operations | 컴퓨터의 논리 연산 구조 | 하드웨어 (1) | 2021.10.11 |
[컴퓨터구조] Arithmetic Circuits | 컴퓨터의 산술 연산 구조 | 하드웨어 (0) | 2021.10.11 |