ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. 기본 컴퓨터의 구조와 설계
    전공공부/컴퓨터시스템구조 2020. 3. 25. 20:59
    728x90
    반응형

    목차

    1. 명령어 코드

    2. 컴퓨터 레지스터

    3. 컴퓨터 명령어

    4. 타이밍과 제어

    5. 명령어 사이클

    6. 메모리 참조 명령어

    7. 입출력과 인터럽트

    8. 컴퓨터에 대한 완전한 기술

    9. 기본 컴퓨터의 설계

    10. 누산기 논리의 설계

     

    5.1 명령어 코드

    이 장에서는 레지스터 전송문으로 나타내어지는 기본 컴퓨터의 각 연산이 어떻게 동작하는지를 설명한다. 컴퓨터의 구조는 내부 레지스터, 타이밍과 제어구조, 명령어 집합에 의해서 정의된다.

    디지털 시스템의 내부 조직은 레지스터 안에 저장된 데이터를 가지고 수행되는 마이크로 연산의 시퀀스에 의해서 정의된다. 디지털 컴퓨터는 범용(general purpose) 시스템으로서 다양한 마이크로 연산을 실행할 수 있으며 수행할 연산의 특수한 시퀀스를 명령할 수도 있다. 그러한 시스템의 사용자는 원하는 연산과 피연산자(operand), 처리되는 순서를 기술한 명령어의 집합인 프로그램에 의해서 처리 과정을 제어할 수 있다. 컴퓨터의 명령어는 컴퓨터에 대한 일련의 마이크로 연산을 기술한 이진 코드로서 이것은 데이터와 함께 메모리에 저장되는데 제어 신호는 각 명령어를 메모리로부터 읽어서 그것을 제어 레지스터에 갖다놓는다. 그리고 나서 제어 신호는 명령어의 이진 코드를 해석하여 제어 함수를 발생시킴으로써 명령어를 실행한다. 이와 같이 명령어를 저장하여 실행하는 "내장 프로그램" 개념은 범용 컴퓨터의 가장 중요한 특성이다.

     

    명령어 코드는 컴퓨터에게 어떤 특별한 동작을 수행할 것을 알리는 비트들의 집합으로서 여러 개의 부분으로 나뉘어지는데, 그 중 가장 기본적인 부분은 연산 코드 부분이다. 연산 코드는 가감승제나 시프트, 보수 등과 같은 동작을 정의한 비트들의 집합으로서 이 연산 코드 부분이 n비트로 구성되면 최대 2^n개의 서로 다른 연산을 실행할 수 있다.

     

    5.1.1 저장 프로그램 구조

    컴퓨터의 가장 간단한 구성은 단 한 개의 프로세서 레지스터를 가짐으로써 두 개의 부분으로 구성된 명령어 코드를 사용하는 것이다. 이때 한 부분은 실행할 연산을, 그리고 다른 한 부분은 피연산자가 저장된 메모리내의 주소를 기술하게 되는데, 메모리로부터 읽혀진 피연산자 부분은 레지스터에 저장된 데이터와 연산을 실행하게 된다. (그림 5-1)

     

    4096워드를 가진 기억 장치에 대해서 12비트의 주소가 필요하다. 16비트 워드를 사용한다면 12비트는 주소에, 그리고 나머지 4비트는 연산 코드에 할당함으로써 지정된 주소의 피연산자와 레지스터 사이에 마이크로 연산들이 실행된다. 이때 하나의 프로세서 레지스터를 누산기(accumulator,(실질적으로 마이크로 연산들이 실행되는 레지스터))라고 부르며 AC로 표시한다. (실질적으로 마이크로 연산들이 실행되는 레지스터)AC의 클리어, 보수, 인크리멘트 등과 같은 명령어들은 피연산자 부분이 필요없으므로 5부터 16까지의 12비트는 특별한 다른 목적을 위해 사용되어질 수 있다.

     

    5.1.2 간접 주소

    명령어 코드의 피연산자 주소 부분이 직접 피연산자의 내용을 나타낼 수도 있다. 이와 같이 피연산자의 내용이 담겨있는 메모리 주소를  나타내는 경우에는 직접 주소(direct address), 그리고 주소의 내용을 담고 있는 장소의 주소를 저장하고 있는 메모리 워드의 주소를 간접 주소(indirect address)라고 부른다. 보통의 경우 한 비트를 사용해서 명령어 코드의 주소 부분이 직접 주소인지 간접 주소인지를 구별한다.

     

    그림 5-2(a)의 명령어 형식을 보자 이것은 3비트의 연산 코드와 12비트의 주소, 그리고 I로 표시되는 간접 주소 모드(mode)비트로 구성되어 있다. 모드 비트가 0이면 직접 주소를 나타내고 1이면 간접 주소를 나타낸다.

     

    그림 5-2(b)의 직접 주소 명령어는 메모리 주소 22에 놓여있다. I비트는 0이고, 연산 코드는 ADD를 나타내며, 주소 부분은 457을 가리키고 있다. 따라서 이 명령어는 제어에 따라 주소 457의 피연산자의 읽기와 AC의 내용에 더하는 동작을 한다.

     

    그림 5-2(c)의 명령은 주소 35에 놓여 있으며, I비트는 1을 가리키고 있다. 따라서 이 명령어는 간접 주소를 사용하는 것으로서, 제어를 통해 주소 300에 접근하면 실제로 피연산자가 존재하는 주소를 얻을 수 있다. 이 경우에 피 연산자의 주소는 1350이 된다. 따라서 간접 주소 명령어는 피연산자를 얻어 오기 위하여 두 번의 메모리 참조가 필요하다. 그리고 4-2(b)의 457과 4-2(c)의 1350과 같이 피연산자의 목적 주소를 유효 주소(effective address)라는 용어로 정의한다..

     

    5.2 컴퓨터 레지스터

    컴퓨터 명령어는 보통 연속적인 메모리상에 위치하고, 이것들이 한 번에 하나씩 순차적으로 수행된다. 따라서 다음 수행될 명령어의 주소를 알아낼 수 있는 카운터같은 장치가 필요하다. 또한 제어 장치내에는 메모리에서 읽어온 명령어 코드를 저장할 수 있는 레지스터와 데이터를 조작하기 위한 프로세서 레지스터, 그리고 메모리의 주소를 갖고 있는 레지스터가 필요하다. 이와 같은 레지스터 구성이 그림 5-3에 그려져 있다.

    메모리 장치는 4096 워드로 구성되어 있으며, 각 워드는 16비트이다. 즉 피연산자의 주소를 위해 12비트가 필요하고, 3비트는 명령어 코드를 나타내며, 나머지 1비트가 직접 주소, 간접 주소를 구별하는 데 사용된다.

    데이터레지스터 DR은 메모리에서 읽어온 피연산자를 저장한다.

    누산기레지스터 AC는 범용 처리 레지스터로서 사용된다. 질적으로 마이크로 연산들이 실행되어 그 값들이 저장되고 처리되는 레지스터이다.

    명령어레지스터 IR에는 메모리에서 읽어온 명령어가 저장된다.

    임시 레지스터 TR은 계산 도중의 임시 데이터를 저장한다.

    메모리 주소 레지스터 AR와 프로그램 카운터 PC는 메모리의 주소를 나타내어야 하므로 12비트로 구성되어 있다. PC의 내용이 카운트 순서에 따라 하나씩 증가함에 따라 명령어들은 분기 명령어를 만날 때까지 순차적으로 수행된다.

    분기 명령어가 수행될 때에는 주소 부분이 PC로 전송되어 다음 수행될 명령어의 주소를 지정하게 된다.

    이 밖에 입출력 장치로부터 8비트 문자 정보를 송수신하기 위하여 입력 레지스터(INPR)와 출력 레지스터 (OUTR)가 사용된다.

     

    5.2.1 공통 버스 시스템

    기본 컴퓨터에는 레지스터들 사이나 레지스터와 메모리 사이에 정보 전송을 하기 위한 경로(path)가 제공되어야 한다. 컴퓨터에서는 이와 같은 경로를 버스 시스템으로 구성하는데 4-3 절에서 멀티플렉서와 3-상태 버퍼 게이트를 이용한 버스 시스템을 이미 살펴보았고, 그림 5-4에서는 레지스터와 메모리를 공통 버스 시스템으로 연결하는 방법을 보여주고 있다.

    공통 버스에 연결된 기본 컴퓨터의 레지스터

    예를들어 S2S1S0=011이면 3번으로 표시된 DR의 출력이 버스에 놓이도록 선택된다. 또한, 공통 버스는 각 레지스터의 입력과 메모리의 데이터 입력에 연결되어 있는데, LD(로드)입력이 인에이블되어 있는 레지스터가 다음 클럭 펄스에서 버스의 데이터를 받아서 저장한다. 메모리는 쓰기 입력이 활성화 되었을 때 버스의 내용을 받을 수 있으며, S2S1S0=111이고 읽기 입력이 활성화되었을 때 16비트 출력을 버스에 올려 놓는다. 12비트인 AR과 PC의 내용이 버스에 전송될 때는 상위 4비트가 0으로 채워지며, 버스의 내용이 AR이나 PC로 전송될 때에는 하위 12비트만 전송된다.

     

    5.3 컴퓨터 명령어

    기본 컴퓨터는 그림 5-5와 같은 세 가지 명령어 코드 형식을 가지고 있으며, 각 명령어에서는 3비트로 구성된 연산 코드(opcode)에 의해 나머지 13비트의 의미가 결정된다.

    레지스터 참조 명령어는 연산 코드가 111이고 최상위 비트는 0으로 되어 있으며, 주로 AC레지스터에 대한 연산을 지정한다. 입출력 명령어는 연산 코드에 111, 최상위 비트에는 1을 가진다. 이것은 레지스터 참조 명령어와 마찬가지로 메모리에 대한 참조가 필요없고, 나머지 12비트를 입출력 연산의 종류를 나타내는 데 사용한다.

    여기서 명령어의 3비트만이 연산 코드로 사용되어 실행 가능한 동작수는 2^3=8가지가 최대이나 사실상 레지스터 참조 명령어와 입출력 명령어에서 12비트가 연산 코드로 사용되므로 실제로 가능한 동작수는 훨씬 많게 되나 여기서는 25가지를 선택하였다. 이것에 대한 명령어가 표 5-2에 기재되어있다.

     

    5.4 타이밍과 제어

    기본 컴퓨터의 모든 플립플롭과 레지스터는 주 클럭 발생기에 의하여 제어된다. 그림 5-6에 제어 장치의 블럭도가 그려져 있는데, 이것은 두 개의 디코더와 하나의 순차 카운터, 그리고 여러 개의 제어 논리 게이트로 구성되어 있다. 메모리에서 읽어온 명령어는 공통 버스 시스템에 있는 명령어 레지스터 (IR)에 놓이게 되고, 이 중에서 연산 코드 부분이 3X8 디코더에 의해 D0에서 D7까지 디코딩된다. 명령어 레지스터의 15번째 비트는 I로 표시되는 플립플롭에 전송되며, 나머지 0에서 11번째 비트들은 제어 논리 게이트로 연결된다. 4비트 순차 카운터(SC)의 출력은 디코더에 의해 T0에서 T15까지 16개의 타이밍 신호를 생성한다.

    순차 카운터는 동기적으로 클리어되는 기능을 가지고 있다. 예를 들어 타이밍 신호가 T0,T1,T2,T3,T4와 같은 순차로 카운트된다고 가정하면, 시간 T4에서 디코더 출력 D3가 활성화되었을 때 SC가 0으로 클리어되도록 하는 문장을 다음과 같이 나타낼 수 있다.

    D3T4: SC ← 0

    이 문장에 대한 제어 신호의 시간 관계를 보여주는 타이밍도가 그림 5-7에 있다.

    이렇듯 컴퓨터의 동작을 완전히 이해하려면 클럭 변이와 타이밍 신호 사이의 시간 관계를 잘 알아야 한다. 예를 들어 다음의 레지스터 전송문은 타이밍 신호 T0가 1일 때 PC의 값을 AR로 전송하는 것을 나타낸다.

    T0: AC ← PC

    이 경우에 T0는 한 클럭 사이클 동안 1을 유지하는데, 이 기간 동안 PC의 내용이 버스에 올려지고(S2S1S0=010) AR의 LD(로드)입력도 인에이블 된다.

     

    5.5 명령어 사이클

    기본 컴퓨터에서 각 명령어 사이클은 다음과 같은 단계들로 이루어져 있다.

    1. 명령어를 메모리에서 가져온다 (fetch).

    2. 명령어를 디코딩한다. (decode)

    3. 간접 주소 방식의 명령어일 경우에 메모리로부터 유효 주소를 읽어온다. (read)

    4. 명령어를 실행한다. (execute)

     

    5.5.1 Fetch와 디코드

    초기에 프로그램 카운터 (PC)는 프로그램의 첫 명령어에 대한 주소를 가지고 있으며, 순차 카운터 (SC)는 0으로 타이밍 변수 T0를 가리킨다. 다음에 매 클럭마다 타이밍 변수는 T0,T1,T2와 같은 순서로 변한다. 이 타이밍 변수들에 맞추어서 fetch와 디코드 단계에 대한 마이크로 연산은 다음과 같은 레지스터 전송문으로 표시된다.

    •T0: AR ← PC
    •T1: IR ← M[AR], PC ← PC + 1
    •T2: D0,…, D7← Decode IR(12 -14), AR ← IR(0 -11), I ← IR(15)

     

     

     

    명령어 사이클에 대한 흐름도

    fetch 동작을 수행 한 후 명령어 코드가 담겨있는 I0,I1,I2를 참조하게 되는데 이때 I2I1I0=111 =D7이면 레지스터 참조 명령어 또는 입출력 명령어라는 뜻이고 그 외에 메모리 참조 명령어가 수행된다. 그래서 T3에서 디코드를 통해 여러 명령어를 해석하여 수행하게 된다.

     

    5.5.3 레지스터 참조 명령어

    레지스터 참조 명령어는 D7=1이고 I=0인 명령어로, IR(0-11)에 있는 나머지 12비트로 12가지 명령어를 나타낸다. 이 명령어들에 대한 제어 함수와 마이크로 연산이 표 5-3에 나열되어 있다. 모든 제어 함수는 D7 I` T3의 부울식이 필요한데, 이것을 간단히 기호 r로 나타내며, IR(0-11) 레지스터의 각 비트를 Bi로 표시하여 각 명령어에 대한 제어 함수를 구별한다. 예를들어 CLA는 이진 코드로 0111 1000 0000 0000을 가리킨다. 따라서 이 명령어에 대한 마이크로 연산을 구동시키는 제어 함수는  D7 I` T3 B11 = rB11이 된다. 이와 같이 레지스터 참조 명령어는 시간 T3에 수행이 완료되고, 순차 카운터의 타잉밍 신호는 다시 T0으로 돌아간다.

     

    5.6 메모리 참조 명령어

    표 5-4는 레지스터 전송문을 이용하여 7개의 메모리 참조 명령어를 자세하게 기술해 놓은 표이다. 각 명령은 명령어 코드 디코더의 출력 Di (i=0,1,2,3,4,5,6)에 의하여 구별되고, 피연산자에 대한 유효 주소는 T2(I=0일 때)나 T3(I=1 일 때) 시간에 AR레지스터로 전송된다. 그리고 명령의 수행은 타이밍 신호 T4에서 시작된다. 이 경우, 메모리에 저장되어 있는 데이터는 직접 처리될 수 없기 때문에 여러 개의 마이크로 연산을 통해서 명령어가 수행된다.

     

    AND 명령어

    이 명령어는 AC와 유효 주소로 지정된 메모리 워드의 각 비트쌍에 대하여 AND논리 연산을 수행하고, 결과를 AC에 전송한다. 이 명령어를 수행하기 위해 필요한 마이크로 연산은 다음과 같다. 시간 T4에서는 메모리의 피연산자를 DR레지스터에 전송하고, T5에서는 AC와 DR사이의 AND 연산 결과를 AC에 저장하고, 동시에 SC를 클리어하여 새로운 명령어 사이클이 시작되도록 한다.

    •Direct: 0000, Indirect: 1000
    •D0T4: DR ← M[AR]
    •D0T5: AC ← AC and DR, SC ← 0

     

    ADD 명령어

    이 명령어는 유효 주소로 지정된 메모리 워드의 내용을 AC에 더한 다음, 그 합은 AC에 저장하고 출력 캐리는 E플립플롭에 전송한다. ADD 명령어를 수행하기 위해 필요한 마이크로 연산은 다음과 같다.

    •Direct: 0001, Inditect: 1001
    •D1T4: DR ← M[AR]
    •D1T5: AC ← AC + DR, E ← Cout, SC ← 0

     

    LDA 명령어

    이 명령어는 유효 주소로 지정된 메모리 워드의 내용을 AC에 전송한다. LDA 명령어를 수행하기 위해 필요한 마이크로 연산은 다음과 같다.

    •D2T4: DR ← M[AR] 
    •D2T5: AC ← DR, SC ← 0

     

    STA 명령어

    이 명령어는 AC의 내용을 유효 주소로 지정된 메모리 워드에 전송한다. AC의 출력과 메모리의 입력은 버스를 통하여 연결이 되어 있기 떄문에 다음과 같이 하나의 마이크로 연산으로 STA명령 (store AC)을 수행할 수 있다.

    •D3T4: M[AR] ← AC, SC ← 0

     

    BUN 명령어

    이 명령어는 프로그램의 수행을 유효 주소로 지정된 명령어로 옮겨준다. 순서와 관계없이 다음 수행될 명령어를 지정하기 때문에 무조건 분기 또는 점프(jump)라고 표현한다. 이 명령어를 수행하기 위해 필요한 마이크로 연산은 다음과 같다.

    •D4T4: PC ← AR, SC ← 0

     

    BSA명령어

    이 명령어는 서브루틴(subroutine) 또는 프로시저 (procedure)라고 하는 프로그램의 일부분으로 분기하는 데 유용하게 상용된다. BSA명령어 (branch and save return address)이 수행되면, 현재 PC에 저장되어 있는 순서상의 다음 명령어 주소가 유효 주소로 지정된 메모리에 저장되고, 유효 주소보다 1이 큰 값이 PC로 전송되어 서브루틴의 첫 명령어를 가리킨다.

    M[AR] ← PC, PC  AR +1

     

    그림 5-10에 BSA명령어에 대한 수행 예가 있는데, BSA 명령어가 메모리 주소 20에 있고 I비트는 0이며  주소부분은 135를 가리키고 있다. 그림의 (a)부분에서 fetch와 디코드 단계가 끝난 후, PC는 다음 명령의 주소인 21을 가지고, AR은 유효 주소 135를 가지고 있음을 보여준다. 다음에 BSA는 다음과 같은 연산을 수행한다.

    M[135] ← 21, PC ← 135 + 1=136

    BSA 명령어 실행의 예

    이 연산의 결과가 그림 5-10(b)에 나타나 있다. 복귀 주소 21은 메모리 주소 135에 저장되고, 프로그램은 주소 136부터 시작하는 서브루틴에서 계속 수행된다. 메모리 주소 21이 가리키는 원래의 프로그램으로 되돌아오기 위해서는 서브루틴의 맨 끝에서 간접 BUN명령어를 이용한다. 이 명령어가 수행되면, 간접 단계에서 135로 지정된 메모리에서 유효 주소 21을 읽어와 PC에 저장하고 다음 명령어 사이클에서 이 주소로부터 수행을 시작한다. 즉 BSA명령어는 서브루틴의 호출에 이용되고, 간접 BUN 명령어는 서브루틴의 복귀에 이용된다. BSA명령어는 다음과 같이 두 개의 마이크로 연산으로 나뉘어서 수행되어야 한다.

    •D5T4: M[AR] ← PC, PC ← AR + 1
    •D5T5 : PC ← AR, SC ← 0 

     

    5.7 입출력과 인터럽트

    컴퓨터는 사용자와 통신을 하기 위해서 외부 장치, 즉 메모리로 데이터와 명령어를 읽어들일 입력 장치와 계산 결과를 사용자에게 나타낼 출력 장치를 갖추어야 한다. 이 절에서는 많은 종류의 입출력 장치 중 키보드와 프린터같은 단말 장치를 가지고 입출력 통신의 기본적인 요구사항을 설명한다.

    5.7.1 입출력 구성

     

     

    송신기 인터페이스(Transmitter interface)는 키보드로부터 직렬로 정보를 받아서 INPR에 전송하며, 수신기 인터페이스(reciever interface)는 OUTR로부터 정보를 받아서 프린터에 직렬로 전송한다. INPR는 영자숫자 입력 정보를 나타내고, FGI는 제어 플립플롭이다.  정보 전송의 과정을 살펴보면 처음에 FGI가 클리어되고 키를 쳤을 때 8비트 코드가 INPR에 시프트된 후 FGI는 1로 세트된다. 플래그가 세트되어 있는 동안은 다른 키를 쳐서 INPR에 있는 정보를 변화시킬 수 없다. 컴퓨터는 플래그를 체크하여 그것이 1이면 INPR로부터 AC로 병렬 전송을 하고 FGI를 클리어시킨다. 일단 FGI가 클리어되면 새로운 정보가 INPR에 시프트될 수 있다. 

    출력 과정도 입력 과정과 유사하게 이루어지는데 우선 FGO가 1로 세트되고 컴퓨터는 FGO를 체크하여 그것이 1이면 AC로부터 OUTR로 정보를 병렬 전송한다. 그리고나서 FGO를 클리어시키면 출력 장치는 OUTR로부터 정보를 가져가고 해당되는 문자를 프린트한 후 FGO를 0로 세트시킨다. 마찬가지로 FGO가 1인 상태에서 컴퓨터는 OUTR에 새로운 정보를 넣지 못한다.

     

     

    5.7.2 입출력 명령어

    입출력 명령어는 AC레지스터로 정보를 전송하고, 플래그 비트를 검사하며, 인터럽트를 제어하는 기능을 가지고 있다. 입출력 명령어들에 대한 제어 함수와 마이크로 연산이 표 5-5에 나열되어 있다. 연산 코드가 1111이므로, 모든 제어 함수는 D7 I T3의 부울식이 필요한데, 이것을 간단히 기호 p로 나타내며, IR(6-11)레지스터의 각 비트를 Bi로 표시하여 각 명령에 대한 제어 함수를 구별한다.

    인터럽트를 수행하는 과정:

    플래그가 0이면 분기 명령이 수행되어 계속 플래그를 검사하다가, 플래그가 1이 되면 분기 명령을 건너뛰어 다음의 입출력 명령어를 수행하게 된다. 마지막 두 가지 명령어는 인터럽트 인에이블 플립플롭 (IEN)을 세트하거나 클리어하는 동작이다.

     

    5.7.3 프로그램 인터럽트

    이상과 같이 플래그를 사용한 통신 방법을 프로그램 제어 전송이라고 하는데 이것은 프로세서와 입출력 장치와의 속도 차이 때문에 매우 비능률적이 된다. 예를 들어 컴퓨터가 10 us(micro sec) 동안 fetch와 실행 사이클을 수행하고 입출력 장치가 초당 10개의 문자를 처리할 수 있다면 입출력 장치는 1개 문자 처리에 100,000 us의 시간이 필요하므로 매 전송시마다 5000번의 플래그 체크가 필요하게 된다. 따라서 컴퓨터는 프로그램을 실행하는 동안에 플래그를 체크하지 않으며 플래그가 세트되면 컴퓨터는 현재 실행하고 있는 프로그램을 즉각 중지하고 플래그가 세트되었다는 정보를 받아들여 입출력을 실행하게 된다. 실행이 끝나면 다시 인터럽트 이전에 실행하던 프로그램을 계속 실행하는데 이러한 인터럽트 처리과정에 필요한 것이 인터럽트 인에이블 플립플롭 (interrupt enable flip-flop) IEN이다.

     

    IEN은 명령어에 의해서 세트되거나 클리어될 수 있다. 클리어되면 플래그는 컴퓨터를 인터럽트시킬 수 없게 되며 IEN이 세트될 때만 인터럽트를 걸 수 있다.

     

    그림 5-13의 흐름도는 컴퓨터에 의해 인터럽트가 처리되는 과정을 설명하고 있다. 인터럽트 플립플롭 R이 0이면, 명령어 사이클을 수행한다. 명령어 사이클의 실행 단계에서는 IEN을 검사하고 그 값이 1이면, 플래그 비트를 검사한다. 두 플래그 비트가 모두 0이면, 입력이나 출력 레지스터에 전송할 정보가 없는 것이므로 다음 명령어 사이클을 계속 수행한다. 그러나 IEN이 1이고 두 플래그 중에서 하나라도 그 값이 1이면, 플립플롭 R이 1로 세트된다. R값은 실행 단계의 마지막에서 검사되어 1이면, 명령어 사이클 대신에 인터럽트 사이클을 수행하게 된다.

     

     

    그림 5-14에서 메모리의 주소 255에 있는 명령이 수행될 때, R이 1이고 인터럽트가 발생했다고 가정하면, 현재 PC에 있는 256이 복귀 주소이다. 프로그래머는 그림 5-4(a)에서 보는 바와 같이 입출력 서비스 프로그램을 주소 1120에 올려놓았고, 주소 1에는 BUN 1120명령을 저장해놓았다고 간주한다. 이러한 상황에서 인터럽트 사이클이 수행되면, PC의 값(256)이 메모리 주소 0에 저장되고, PC는 1로 세트되며, R은 클리어된다. 다음 명령 사이클은 메모리 주소 1에 저장되어 있는 명령을 가지고 수행되므로, 입출력 서비스 프로그램이 저장되어 있는 주소 1120으로 분기하게 된다. 입출력 서비스 프로그램의 수행이 완료되면, ION명령으로 IEN을 1로 세트하고, 그림 5-4(b)에서 보는 바와 같이 간접 BUN명령을 이용하여 인터럽트가 발생했던 곳으로 프로그램을 복귀시킨다.

     

    5.7.4 인터럽트 사이클

    인터럽트 플립플롭 R은 IEN=1이고 FGO나 FGI가 1일 때, 1로 세트된다. 이것은 타이밍 신호 T0,T1,T2외의 어떤 시간에서도 수행되며, 레지스터 전송문으로 나타내면 다음과 같다

    •T0’T1’T2’(IEN)(FGI + FGO) : R ← 1

    다음에 인터럽트 플립플롭 R=0일 떄만 명령 사이클이 수행되도록 명령 사이클의 fetch와 디코드 단계에서 제어 함수를 R`T0, R`T1, R`T2와 같이 수정한다. R이 1일 때에는 인터럽트 사이클이 수행되어 복귀 주소를 메모리의 주소 0에 저장하고 프로그램의 수행을 주소 1로 분기시킨다음 IEN, R, SC를 모두 0으로 클리어한다. 이것을 마이크로 연산으로 표시하면 다음과 같다.

    •RT0: AR ← 0, TR ← PC
    •RT1: M[AR] ← TR, PC ← 0
    •RT2: PC ← PC + 1, IEN ← 0, R ← 0, SC ← 0

     

     

     

     

    컴퓨터의 동작을 기술하는 흐름도
    컴퓨터에 대한 제어 함수와 마이크로 연산

     

    728x90
    반응형

    댓글

Designed by Tistory.