REPORT마이크로프로세서 실험1. 마이크로프로세서의 구성요소가. CPU 모듈;가장 핵심적인 부분으로 MPU(microprocessor unit)라고도 한다.- CPU 모듈의 역할ㆍ명령어 인출 : CPU는 기억 장치로부터 실행할 명령을 읽어 들여야 한다.ㆍ명령어 해석 : 명령어가 어떤 동작을 요구하는지를 해석해야 된다.ㆍ데이터 인출 : 명령어에서 지시하는 연산이 수행되도록 기억장치로부터 데이터를 가져온다.ㆍ데이터 처리 : 명령어에서 지시하는 산출 처리 또는 논리 처리가 수행되게 한다.ㆍ데이터 기록 : 수행된 결과는 기억 장치에 저장시킨다.< CPU 내부 장치의 관계>-CPU 제어회로 : 명령어의 인출과 해독 및 각 장치에서 동작을 개시하도록 지시 신호를 보내는역할이다.-연산장치 : 산술적 연산이나 논리적 연산을 수행하고, 누산기는 연산 장치와 함께 동작하며, 피연산데이터의 제공과 연산된 결과를 기억하는 일을 수행한다.-명령 레지스터 : 수행되는 명령어를 기억하여 그 명령에 따라 CPU가 동작되도록 제어 회로에서 지시신호가 만들어지게 한다.-레지스터 : CPU 모듈 내에서 임시 기억 장치와 유사한 일 수행한다.-종류ㆍ명령 계수기 : 명령어를 가져오기 위한 번지를 제공한다.ㆍ범용 레지스터 : 연산을 위한 데이터 기억한다.ㆍ 제어를 위한 특수 정보 기억하는 레지스터-버스 제어 회로 : 번지 회로를 통하여 명령어나 데이터가 기억된 위치가 지적될 수 있도록 하고,데이터 버스를 통하여 연산될 데이터와 연산 결과가 번지 버스에서 지적한 장소이이루어지게 하며,각 장치들이 서로 중첩되어 사용함으로써 발생하는 교착 상태 등이발생하지 않도록 버스의 사용을 제어한다.나. 기억장치-마이크로프로세서 : 주기억 장치에서 실행할 명령과 연산될 데이터만 가져온다. 레지스터와캐시 기억 장치에서 기억한다.-제어 기억 장치 : 마이크로 동작을 발생시키는 프로그램이 기억된 곳으로 롬에 저장한다.< 기억 장치 모듈>다. 입출력 모듈-중앙 처리부와 주기억 장치, 주변 장치 사이의 데이터가 상호 송·수중앙 처리 장치에 송·수신 되는 데이터의 전송시간이 차이가 있으므로 전송 시간이빠른 경우는 데이터를 버퍼에 기억시켜 두었다가 주변 장치에 전송, 주변 장치의 느린 입력은 버퍼에기억시켰다가 중앙 처리 장치가 비동기적으로 가져간다.ㄹ.오류 검색-기계적, 전기적 오동작이 있을 경우 중앙 처리 장치에 알려야 하므로 입출력이 일어날 때마다 입출력모듈이 오류 여부 검사한다.라. 버스ㄱ.데이터 버스-중앙 처리 장치에서 처리된 데이터나 기억 장치에 기억된 데이터들이 전달되는 통로, 양방향버스라 한다.< 마이크로프로세서의 버스 구성도>ㄴ. 번지 버스-마이크로프로세서에서 기억 장치나 입출력 장치로 정보를 보내게 된다. 단방향 버스이다.ㄷ.제어 버스-중앙 처리 장치가 입출력 장치를 제어하거나 입출력 장치들이 중앙 처리 장치로부터 제어 신호를 얻기위한 제어 신호가 흐르는 통로이다.2. Z-80 마이크로프로세서의 레지스터Z80 레지스터들의 내용 8 8 8 8 A F A' F' 8 8 8 8 B C B' C' 8 8 8 8 D E C' E' 8 8 8 8 H L D' L' 8 7 I R 16 IX 16 IY 16 SP 16 PC가. A 레지스터A 레지스터는 여러가지 연산을 할 때 중심적 역할을 하기 때문에 accumulator라고 하며, 특별 취급을 할 때가 있다. 8비트의 덧셈, 뺄셈, 논리합, 논리곱, 배타적 논리합, 비교 연산 등은 모두 A 레지스터를 상대로 이루어진다. 입, 출력 포트와 데이터를 주고받을 때도 C레지스터가 간접적으로 포트의 번지를 지정하는 경우를 제외하면, 반드시 A 레지스터를 경유하여야 한다. 또한 메모리와 자유롭게 데이터를 교환할 수 있는 것도 A 레지스터뿐이다.나. F 레지스터플래그 레지스터라고 한다. 어떤 연산 명령이 실행되면 그 결과에 따라서 S(sign), Z(zero), H(half carry), P/V(parity/overflow), N(subtract), C(carry)의 각 플래그가 “1” 또는 “0”으로 변화하거나 또는 변화하지 않거나 한다.INC, DEC 명령으로, A 레지스터의 내용이 01111111 → 1000000 또는 그와 역으로 변화할 때는 오버플로우 플래그로서 동작하여, “1”로 세트된다. 이것은 2진수로서 부호가 붙은 계산을 할 경우에 유리하다. 즉, 2진수로 음수를 나타낼 때 그 최상위의 자리(8비트이면 비트7)를 “1”로 한 소위“2의 보수”를 사용하여 부호가 붙은 계산을 한다. 예를 들어, 양수와 양수를 덧셈하여 겉보기에 음수로 되어 버릴 경우, 음수와 음수의 합이 양수로 되는 경우, 양수에서 음수를 빼서 음수로 되는 경우, 음수에서 양수를 빼서 양수로 되는 경우 등의 사태가 발생한다. 이것은 수학적으로 틀리므로 오버플로우라고 하는 플래그로 표시하여, 그 계산 결과를 보정하도록 하는 것이다. N 플래그는 직전의 연산 내용이 뺄셈이면 “1”, 덧셈이면 “0”으로 된다. 덧셈 또는 뺄셈 명령 후에 DAA(Decilmal Adjust Accumlator) 명령이 실행되면, F 레지스터 내의 H 및 N 플래그가 조사되어 A 레지스터의 2진수가 곧바로 BCD 수로 변환된다. C 플래그는 덧셈, 뺄셈의 경우에 자리올림이나 자리빌림이 있을 때 “1”로 된다. 그러나 이 외에도 DAA 명령으로 BCD 수의 자리올림이 있을 때, 로테이트, 쉬프트 명령으로 C 플래그에 “1”이 돌아왔을 때 등에도 “1”로 된다.다. B 레지스터범용 레지스터의 하나로 A 레지스터처럼 여러가지의 연산 조작이나, I/O 포트와 데이터 교환이 직접 되지 않는 점 등을 제외하면, 어떤 목적으로도 사용할 수 있는 것이다. 그러나 Z80-CPU의 명령표를 보면, B 레지스터는 특별한 성질이 있음을 알 수 있다. 그것은 프로그램의 어느 부분을 반복하여 실행시키고 싶을 때, 그 반복 횟수를 B 레지스터에 로드하여 두면, DJNZ(decrement jump non zero) 명령을 사용할 수 있다. 이 외에 INDR(in decrement repeat), INIR(in increment repeat), OTDR(out decreE, HL과 같이 2개를 짝(pair)지어 1개의 16비트 레지스터로 사용할 수도 있다. 이것을 레지스터페어(register pair)라고 하며, 사용하는 방법에 각각의 특색이 있다. 우선, HL 레지스터의 경우, 이것으로 16비트의 덧셈과 뺄셈을 할 때는 마치 8비트의 연산을 할 때의 A 레지스터와 똑같이 어큐뮬레이터로 동작한다. 또한 이 HL 레지스터에 미리 메모리의 번지를 로드시켜 놓고 그 레지스터 페어의 내용으로 메모리 번지를 간접 지정을 하면, B 레지스터의 반복 횟수 카운터 기능 또는 C 레지스터의 I/O포트 간접 지정 기능 등과 조합하여 주변 INDR, OTDR, INIR, OTIR 등의 명령으로 사용할 수 있다. 이 외에도 HL 레지스터의 내용으로 메모리 번지를 간접 지정함으로써 많은 편리한 명령을 적용할 수 있다. BC, DE, HL 레지스터 페어를 동시에 모두 사용하는 예로는 블록 전송 명령(LDIR, LDDR 등)이 있다. 이것도 HL 레지스터에 보내는 쪽 메모리의 선두 번지, DE 레지스터에 받는 쪽 메모리의 선두 번지, 그리고 BC 레지스터에 전송 바이트 수를 각각 미리 로드하여 둔다. 이 경우 HL 레지스터와 DE 레지스터는 메모리 번지의 간접 지정용, BC레지스터는 전송 바이트 수의 카운터용으로 사용하는 것이다.바. 포인터와 카운터예를 들어, C 레지스터의 내용으로 I/O 포트의 번지를, 또는 HL 레지스터 페어의 내용으로 메모리 번지를 각각 간접 지정을 할 때, 이들 레지스터의 사용법을 포인터(pointer) 혹은 “지시 레지스터”라고 한다. 또한, B 레지스터나 BC 레지스터 페어의 내용으로 반복 횟수나 전송 바이트 수를 세는 것과 같은 사용법을 카운터(counter)라고 한다. 물론, 다른 레지스터들도 카운터로 사용 할 수 있으나 DJNZ, LDIR 등의 명령을 편리하게 사용할 수는 없다.사. 인덱스 레지스터Z80-CPU는 인덱스 레지스터(index register)로 16비트의 레지스터 2개, 즉 IX와 IY를 가지고 있다. 이와 같은 편리한 인덱스 레지스터이지만, 디스플레이스먼트의 범위가 -128~+127(80H~7FH)바이트로 한정되어 있다. 또한 명령의 실행 시간이 디스플레이스먼트의 계산분 만큼 더 길게 걸린다.아. 프로그램 카운터프로그램 카운터 PC(program counter)는 프로그램으로 그 내용을 직접 설정하거나 변경 할 수는 없다. 그 동작은, Z80-CPU의 어드레스 출력 단자 핀 A0~A15에서 번지 지정 데이터를 출력하는 것이다. 즉, CPU가 프로그램을 실행하는 과정에서 CPU 내의 회로가 동작하여 그 때마다 자동적으로 필요한 메모리 또는 I/O 포트를 지정하는 번지 데이터를 프로그램 카운터로부터 어드레스 단자 핀에 출력하는 것이다.자. 스택 포인터스택 포인터 SP도 16비트 레지스터이다. 따라서 메모리의 번지를 써넣는 것에 사용한다. CPU가 여러가지 연산 동작을 할 때, 그 연산 과정 중에 각종 데이터를 일시적으로 어디엔가 맡겨 두고 싶을 경우가 있다. 그 때 사용하는 가장 일반적인 방법으로는 CPU 내부의 일반용 레지스터에 맡겨 두는 방법, 메모리에 일시적으로 써넣는 방법 등이 있다. 그러나 이와 같은 방법은 적어도 프로그램 작성자가 언제, 어느 레지스터 혹은 메모리의 몇 번지에 어떠한 데이터를 맡겨 두었는가 등등을 정확히 기억해 둘 필요가 있다. 이러한 불편을 해소하기 위해 스태커를 사용할 수 있다. 스태커라 할 지라도 그것은 특별히 메모리의 일부 번지의 데이터를 맡겨 둘 전용 번지로서 지정해 두는 것에 불과하다. 그 리하여 프로그램 작성자가 그 번지를 지정하는 수단으로 사용하는 것이 스택 포인터이다. 일반적으로 스태커로 사용하는 메모리의 번지 범위, 즉 스택 영역은 프로그램을 작성하는 사람의 자유 의사에 따라 어떻게 정하든 무관하나 실제는 RAM의 번지 범위 중 가장 번지 수가 큰 부분을 사용하는 것이 보통이다. 이터를 맡길 때는 PUSH, 맡긴 데이터를 읽을 때는 POP 명령을 사용한다. 스태커의 동작에서 주의할 점은 맡겨 둔 데이터를 읽어 내는 복한다.