[06-e] CPU-첫걸음; ADD 명령어 - 두 수를 더하기
이제 다음 명령을 가져오는 인출 사이클이다.
PC에 809가 있으므로 다음 실행 할 주소는 809번지에 있다.
메모리 809번지에 “ADD 901”이라는 명령이 들어 있다.
인출 사이클의 실행 과정은 PC → MAR → 메모리 → MBR → IR이다.
인출을 위한 마이크로 연산은 다음과 같다:
①PC에 있는 “809”가 MAR을 통하여
②메모리에 전달되고,
③메모리의 809번지의 내용인 “ADD 901”을 MBR에 넣는다. 마지막으로
④“ADD 901”을 IR에 넣는다.
<“ADD 901” 명령의 인출>
인출 동안에 PC는 1 증가한다 (다음 명령어의 주소).
이 경우 PC는 “810”을 갖는다.
이제 IR에 명령어(“ADD 901”)가 들어 왔으므로
이 명령을 실행하는 단계를 수행할 차례이다(실행 사이클).
<ADD 명령어의 예>
“ADD 901” 명령은
「메모리 901번지의 값과 AC의 내용을 더하여 그 결과를 AC에 저장하라」는 것이다.
“ADD 901” 명령의 실행을 위한 마이크로 연산은 다음과 같다:
①IR의 주소부분(=901번지)을 MAR로 보낸다.
②MAR에 들어 온 주소를 메모리로 보낸다.
③그 주소의 내용(=2)을 MBR에 저장한다.
④AC의 내용(=7)과 MBR의 내용(=2)을 ALC(연산회로)에서 더하고
그 결과(=9)를 AC에 넣는다.
이때 원래 AC가 갖고 있던 내용은 지워지고 새로운 값(=9)이 AC에 저장된다.
ALC(Arithmetic Logic Circuit, 산술논리연산회로)는
ALU안에서 직접 계산을 담당하는 회로이다(줄여서 연산회로).
ALC에는 사칙연산과 논리연산, 관계연산 등의 연산을 수행한다.
<'ADD 901'의 실행>
이렇게 하여 “ADD 901” 명령을 실행하였다.
그 결과로 AC에는 최종적으로 9가 들어간다.
이제 새로운 명령어를 메모리에서 가져온다(인출, Fetch).
다음 명령어는 810번지에 들어 있다.
ADD명령을 마이크로 연산으로 표현하면 다음과 같다.
① IR의 주소부분을 MAR에 보낸다;
MAR ← IR(addr)
② MAR에 저장된 주소를 메모리에서 찾아서 MBR에 넣는다;
MBR ← M[MAR]
③ AC의 내용과 MBR의 내용을 ALC(연산회로)에서 더하고 그 결과를 AC에 넣는다;
AC ← AC + MBR
<ADD 명령어의 마이크로 연산>
시간 | 마이크로 연산 | 설명 |
| MAR ← IR(addr) | IR의 주소부분을 MAR에 보낸다 |
| MBR ← M[MAR] | MAR에 저장된 주소를 메모리에서 찾아서 MBR에 넣는다 |
| AC ← AC + MBR | AC의 내용과 MBR의 내용을 ALC(연산회로)에서 더하고 그 결과를 AC에 넣는다 |
이렇게 하여 “ADD 901” 명령을 실행하였다.
그 결과로 AC에는 최종적으로 9가 들어간다.
이제 새로운 명령어를 메모리에서 가져온다(인출, Fetch).
다음 명령어는 810번지에 들어 있다.
【연습문제】
(1) 위의 예에서 메모리 809번지의 내용을 인출(Fetch)한 결과는 무엇인가?
(2) 위의 예에서 메모리 901번지의 내용은 무엇인가?
현재의 AC의 내용은 무엇인가?
"ADD 901"을 실행하면, 메모리 901번지의 내용과 또 무슨 내용을 더하는가?
"ADD 901"의 결과는 무엇인가?
"ADD 901"의 결과로 AC의 값은 무엇인가?
이 때, AC에 있던 원래의 값인 7은 어떻게 되는가?
(3) ADD명령의 실행에서 실제의 연산이 이루어지는 장치는 무엇인가?
(4) 'AC ← AC + MBR'의 뜻을 설명하시오.