7.3 마이크로 프로그램의 예
일단 컴퓨터와 마이크로 프로그램된 제어 장치의 구조가 결정되면, 제어 메모리에 마이크로 프로그램을 작성해 넣어야 한다. 간단한 범용 컴퓨터로 마이크로 프로그램을 작성하는 방법을 보이기로 한다.
- 컴퓨터 하드웨어의 구성
컴퓨터 하드웨어 구성

- 주 메모리는 명령어와 데이타를 저장
- 프로세서 레지스터로 프로그램 카운터(PC), 주소 레지스터(AR), 데이타 레지스터(DR), 누산기 레지스터(AC)를 가지고 있다.
- 제어장치의 구성
- 마이크로 명령어를 저장하기 위한 제어 메모리
- 마이크로 프로그램된 제어장치를 구성하기 위한 제어 주소 레지스터(CAR)과 서브루틴 레지스터(SBR) 등이 있다.
- 레지스터 간의 정보 전송
- 멀티플렉서를 통해 정보 전송
- DR은 AC, PC 및 메모리로부터 데이타를 받는다.
- AR은 PC와 DR로부터 데이타를 받는다.
- PC는 AR로부터만 데이타를 받는다.
- 산술 논리 시프트 장치의 정보 전송
- AC와 DR에 있는 데이타에 대해 마이크로 연산을 수행
- 그 결과는 AC에 저장
- 메모리의 정보전송
- 컴퓨터의 명령어 형식
컴퓨터 명령어

- I비트는 간접주소를 표시
- 연산 코드(opcode) 는 4-비트
- 주소비트는 11-비트
- ADD 명령어는 유효주소에 저장되어 있는 피연산자를 AC에 더한다.
- BRANCH 명령어는 AC에 있는 피연산자가 음수일 때 유효 주소로 분기
- STORE 명령어는 AC의 값을 유효 주소로 지정된 메모리에 저장
- EXCHANGE 명령어는 AC의 데이타와 유효 주소로 지정된 메모리의 데이타를 서로 교환
마이크로 명령어 형식(Format)
- 마이크로 명령어 형식
마이크로 명령어 코드 형식(20비트)

- 구성
- 20비트로서 4개의 필드로 구분
- F1, F2, F3 필드는 컴퓨터의 마이크로 연산을 지정하며 각각 3비트로 구성
- CD 필드는 상태 비트 조건을 선택
- BR 필드는 분기의 종류를 지정
- AD 필드는 분기주소를 가지며 주소 필드는 7비트로 구성되므로 제어 메모리의 크기가 128=2의 7제곱
마이크로 명령어의 각 필드에 대한 기호와 이진 코드





- F1, F2, F3에 대한 7가지 동작
- 모두 21개의 동작을 수행
- 하나의 마이크로 명령어에는 세 개의 동작만 지정
- 세 개의 동작을 모두 사용하지 않을 때에는 해당 필드의 값을 이진수 000으로 지정
- 위 표의 마이크로 연산들은 레지스터 전송문으로 정의되고 마이크로 프로그램에서 사용되는 기호로 나타내고 있다.
- 이 중에서 전송을 나타내는 마이크로 연산은 근원 레지스터와 목적 레지스터를 포함하도록 다섯 개의 문자로 표시. ex) DR 에서 AC로 전송하는 동작은 DRTAC
예시)
F1 = 000, F2 = 100, F3 = 101의 값을 주면 다음과 같이 두 개의 마이크로 연산을 동시에 지정할 수 있다.
DR ← M[AR] (F2 = 100)
PC ← PC + 1 (F3 = 101)
그러나 010 001 000과 같은 값을 지정하면 AC를 0으로 클리어하는 동작과 AC에서 DR을 빼는 동작을 동시에 수행하여 충돌이 발생. 이와 같은 동작은 동시에 지정할 수 없다.
- CD(조건) 필드의 동작
- 상태 비트 중 하나를 지정
- 조건은 항상 1인 것으로서 CD = 00일 때 항상 참인 조건을 표시. BR(분기) 필드와 함께 사용되어 무조건 분기동작을 수행
- 간접비트 I는 DR의 15번째 비트에, S는 AC의 부호 비트에 따라 그 값이 정해지는 상태 비트
- Z는 AC가 0일 때 참이 되는 상태 비트
- BR 필드의 동작
- 2비트로 구성
- 주소 필드 AD와 연관되어 쓰일 때 바로 다음 마이크로 명령어의 주소를 선택
- BR = 00 이면 점프(JMP) 동작, BR = 01 이면 서브루틴 CALL 동작을 한다.
- JMP와 CALL은 CD 필드의 영향을 받는다.
- CD 필드에서 선택된 조건이 1이면 AD에 있는 주소로 분기, 0이면 바로 다음 명령을 실행
- 서브루틴으로부터의 복귀
- SBR의 값이 CAR로 옮겨지는 것으로 BR = 10일 때이다.
- BR = 11 이면 매크로 연산 비트로부터 CAR로의 매핑은 7.2의 2번째 그림과 같다.
- 매크로 연산은 명령어의 Op-코드 부분을 말하는 것인데, DR(11-14)로써 나타낸다.
- BR 필드의 마지막 2조건은 CD와 AD 필드의 값과 무관함에 유의
기호로 표시된 마이크로 명령어
위의 표에 정의된 기호는 마이크로 명령어를 기호형태로 나타내는 데 사용
기호로 표시된 마이크로 명령어는 어셈블러를 통해 이진 코드로 바꿀 수 있다.
각 기호로 된 마이크로 명령어는 라벨(label), 마이크로 연산, CD, BR, AD등 다섯 개의 필드로 나뉜다. 각 필드는 다음과 같은 정보를 갖게 된다.
- Label 필드
- 공백일 수도 있으며, 기호 주소를 표시할 수도 있다.
- 라벨 뒤에는 콜론(:)이 붙어야 한다.
- 마이크로 연산 필드
- 위 표에서 정의된 한 개나 두 개 또는 세 개의 기호로 구성
- 각 기호는 콤마(,)로 분리
- CD 필드
- U, I, S, Z 중 하나의 문자를 갖는다.
- BR 필드
- 위 표에서 정의된 4개의 기호들 중 하나를 갖는다.
- AD 필드
- 3가지의 기호들 중 하나를 갖는다. 이는 다음 주소를 결정하는 방법을 표시한다.
- 기호 주소(이는 라벨로 프로그램상에 나타나야 한다)
- NEXT(이는 연속된 다음 주소를 뜻한다)
- BR이 RET이나 MAP이면 AD는 공란으로 둔다.
- ORG 슈도 명령어
- 마이크로 프로그램 루틴의 처음 시작 위치를 표시
- ORG 64는 제어 메모리의 64번지에 다음 마이크로 명령어를 기억시키라는 뜻
Fetch 루틴
- 제어워드의 구성
- 128개의 워드를 가지며, 각각의 워드는 20비트로 구성
- 0~63번지는 16개의 매크로 연산을 위한 루틴으로 사용
- 64~127번지는 fetch 루틴이나 indirect 루틴이나 그외의 다른 용도로 사용
- fetch 사이클 루틴
AR ← PC
DR ← M[AR], PC ← PC + 1
AR ← DR(0-10), CAR(2-5) ← DR(11-14), CAR(0,1,6) ← 0
- 동작
- 명령어의 주소가 PC에서 AR로 전송
- 명령어 중 명령코드는 DR로 읽혀지고 주소 부분은 AR로 전송된다.
- DR의 연산 코드 부분을 CAR로 매핑시킴으로써 16개의 루틴 중 하나로 제어를 옮긴다.
- fetch 루틴의 마이크로 명령어에 대한 어셈블리
fetch 사이클 루틴은 제어 메모리의 주소 64, 65, 66에 위치하는 세 개의 마이크로 명령어로 구성할 수 있다. 이전에 정의된 어셈블리어로 다음과 같이 쓸 수 있다.
ORG 64
FETCH: PCTAR U JMP NEXT /PC를 MAR로
READ, INCPC U JMP NEXT /명령 읽고, PC 증가
DRTAR U MAP /MBR(AD)를 MAR로, 또 mapping
- fetch 루틴의 이진 코드
어셈블러는 다음과 같은 기호로 된 프로그램에 대응하는 이진 코드를 만들어낸다. 제어 메모리에 이와 같은 이진 코드가 기억된다.
일반적으로 기호 형태로 마이크로 프로그램을 작성, 어셈블러를 이용해서 그에 대응하는 이진 코드를 만든다.
Binary address |
F1 |
F2 |
F3 |
CD |
BR |
AD |
1000000 |
110 |
000 |
000 |
00 |
00 |
1000001 |
1000001 |
000 |
100 |
101 |
00 |
00 |
1000010 |
1000010 |
101 |
000 |
000 |
00 |
11 |
0000000 |
기호로 표시된 마이크로 프로그램
fetch 사이클의 마지막 동작은 fetch 된 매크로 연산의 루틴으로의 분기 동작이다.
- 예) Op-코드가 0000인 ADD 명령어
- CAR에 0000000을 갖다 놓게 되어 ADD루틴을 수행, BRANCH는 0000100으로 매핑되어 4번지의 BRANCH 명령의 루틴을 수행, STORE는 0001000가 그 루틴의 시작 위치가 된다.
- 각 루틴은 네 개의 마이크로 명령어를 가질 수 있다.
- 유효 주소를 계산하는 동작
- 각 루틴에서는 유효 주소를 계산하는 동작이 공통적으로 필요. 이것을 서브루틴화하면 제어 메모리를 효율적으로 사용가능
- 이 서브루틴을 INDRCT 서브루틴이라 하고 fetch루틴 다음에 저장하기로 한다.
기호로 표시된 마이크로 프로그램


- fetch cycle 루틴
- 간접 서브루틴
- ADD 루틴
- BRANCH 루틴
- STORE 루틴
- 간접 루틴의 실행
INDRCT: READ U JMP NEXT /MBR ← M
DRTAR U RET /MAR ← MBR(AD), CAR ← SBR
- 이 서브루틴으로부터 리턴(RET)할 때에는 SBR의 내용을 CAR로 옮김으로써 ADD루틴의 두번째 마이크로 명령어부터 수행하게 된다.
- ADD 루틴의 실행
- 메모리에서 DR을 통해 피연산자를 읽고 이를 AC와 더한다.
- 이 동작의 실행이 끝난 후에 fetch루틴의 처음으로 점프(jump)한다.
- BRANCH 루틴의 실행
- AC가 음수일 때만 유효주소로 분기
- AC가 음수이면 S=1이 되어 이 상태를 인식
- 표 7-2의 분기 루틴 S의 값을 조사하여 S=0이면 PC의 값을 변경시키지 않아 분기가 일어나지 않게 되고, 다음 마이크로 명령어는 fetch루틴으로 분기
- S=1이면 JMP마이크로 명령어는 OVER의 위치로 분기하게 하고, 이 위치에서 I=1이면 간접 서브루틴을 호출하고 다시 유효주소가 PC로 전송되고 fetch루틴으로 넘어간다.
- STORE 루틴의 실행
- I=1이면 간접 서브루틴을 호출
- AC의 내용이 DR로 전송, DR의 내용이 유효 주소에 저장
- EXCHANGE 루틴의 실행
- 유효 주소로부터 DR로 피연산자를 읽어온다.
- 모서리-트리거형 레지스터의 성질을 이용하여 3번째 마이크로 명령어에서 AC와 DR의 값이 교환된다.
- DR에 저장된 원래 AC의 값은 메모리로 다시 저장된다.
표 7-2는 16개의 명령어 중에서 4개만을 마이크로 프로그램화 한 것이다. 제어 메모리의 69번지부터는 아직 사용하지 않은 상태이다. 곱셈, 나눗셈 등은 4개 이상의 마이크로 연산을 필요로 하는데 69에서 127번까지의 제어 메모리가 그러한 목적을 위해 사용된다.
이진 마이크로 프로그램
제어 메모리를 위한 이진 마이크로 프로그램

- 기호로 표시된 마이크로 프로그램은 읽거나 이해하기에 쉽게 쓰여 있지만, 실제 메모리에 저장되는 형태가 아니다. 따라서 어셈블러나 또는 사람이 직접 이진 코드로 바꾸어야 한다.
- 표 7-2는 어셈블러에 의해 표 7-3의 이진 마이크로 프로그램으로 변환
- 이진 마이크로 프로그램은 제어 메모리 즉, ROM에 저장되어 있다.
- 이런 방식의 제어논리를 마이크로 프로그램 제어라 한다.