https://blog.naver.com/PostView.nhn?blogId=ehdqlstkrl&logNo=220876739015&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F



컴퓨터의 구조는 기본적으로 내부 레지스터, 타이밍과 제어구조, 명령어 집합에 의해서 정의됩니다. 디지털 시스템의 내부 조직은 레지스터 안에 저장된 데이터를 가지고 수행되는 마이크로 연산의 시퀀스(Sequence)에 의해서 정의됩니다. 컴퓨터 연산이란 일련의 마이크로 연산을 기술하는 이진 코드입니다. 여기에서 컴퓨터 명령어는 컴퓨터에 대한 일련의 마이크로 연산을 기술한 이진 코드(연산 코드 + 피연산자)입니다. 이것은 데이터와 함께 메모리에 저장이 됩니다. ①제어 신호는 각 명령어를 메모리로부터 읽어서 그것을 제어 레지스터에 가져다 놓습니다. 그리고 ②제어 신호는 명령어의 이진 코드를 해석해서 제어 함수를 발생시킴으로써 ③명령어를 실행하게 됩니다. 이처럼 명령어를 저장해서 실행하는 '내장 프로그램' 개념은 컴퓨터의 가장 중요한 특성 중에 하나입니다.


  명령어 코드(op-code)는 덧셈, 뺄셈, 곱셈, 시프트, 보수 등과 같은 동작을 정의한 비트들의 집합입니다. 명령어 코드에 할당된 비트의 크기는 가능한 연산들의 수를 결정하는데 n비트 명령어 코드는 당연히 최대한 2^n개의 서로 다른 연산을 실행할 수 있도록 해줍니다. 각 연산 코드에 대한 하드웨어 구현을 위해서 일련의 마이크로 연산이 발생할 수 있습니다. 하나의 연산코드는 마이크로 연산의 집합이라고 할 수 있기 때문에 매크로 연산이라고 불리기도 합니다. 따라서 하나의 연산 코드 = 일련의 마이크로 연산들의 집합입니다.


  기본적으로 간단한 컴퓨터는 한 개의 프로세서 레지스터와 두 부분(연산 코드 + 메모리 주소)으로 이루어진 명령어 코드를 가지고 있습니다. 메모리 워드의 크기는 명령어 크기와 피연산자의 크기를 결정합니다. 명령어 크기란 명령어의 개수를 의미하며 주소의 크기는 메모리의 크기를 결정하는 부분이라고 할 수 있습니다. 만약에 4096 워드를 가진 기억 장치에 대해서는 12비트의 주소가 필요할 것입니다. 16비트 워드를 사용한다면 12비트는 주소에, 그리고 나머지 4비트는 연산 코드에 할당함으로써 지정된 주소의 피연산자와 레지스터 사이에 있는 마이크로 연산들이 실행되는데 이때 하나의 프로세서 레지스터를 누산기(Accumulator)라고 부르며 줄여서 AC라고 표시하게 됩니다.  물론 AC의 클리어, 보수, 인크리멘트 등과 같은 명령어들은 피연산자 부분이 필요하지 않기 때문에 5부터 16까지의 12비트는 특별한 다른 목적을 위해 사용되어질 수 있을 것입니다.


  명령어 코드의 피연산자 주소 부분이 직접 피연산자의 내용을 나타낼 수도 있는데 이러한 경우를 immediate(즉각)이라고 하며 내용이 담겨있는 메모리 주소를 나타내는 경우에는 직접 주소(direct address), 그리고 주소의 내용을 담고 있는 장소의 주소를 저장하고 있는 메모리 워드의 주소를 간접 주소(in-direct address)라고 부릅니다. 보통의 경우 한 비트를 사용해서 명령어 코드의 주소 부분이 직접 주소인지 간접 주소인지 구별하게 됩니다. 



  유효 주소란 실질적으로 가져 올 데이터가 존재하는 주소를 의미합니다. 간접 주소에서 피연산자의 주소를 가지고 있는 메모리 워드는 데이터 배열에 대한 포인터(Pointer)로 사용됩니다. 이러한 포인터는 상용 컴퓨터에서처럼 메모리가 아닌 레지스터에 놓일 수도 있습니다

+ Recent posts