Blog | Tag | Local | Guest | Login | Write |  RSS
안녕하세요 시그원 여러분..시험들은 잘보셨는지요 저는 이번 시험을 잘 못봐서 절망모드입니다..시험이 끝나도 마음이 편치않네요 거기다가 저희과만 학기 텀프로젝트를 발표하는데 제가 팀장이라서(교수님의 기대와...)18일까지는 학교에 매일가서 작업하고 후배들 가르쳐주고 ㅠ_ㅠ 너무 힘이 든답니다. 하지만 블로그를 올려야 한다는 사명감으로(사실 무서운 시그장님과 벌금 압박이 ㄷㄷㄷ) 이렇게 작성합니다. ㅋㅋ 지난번에는 명령어 싸이클까지 알아봤는데요 이번에는 메모리 참조 명령어를 알아보도록 하겠습니다.

위의 표는 레지스터 전송문을 이용하여 7개의 메모리 참조 명령어를 자세하게 기술해 놓은 것 입니다. 각 명령은 명령어 코드 디코더의 출력 D에 의해 구별되고, 피연산자에 대한 유효 주소는 T2(I=0일 때)나 T3(I=1일 때) 시간에 AR레지스터로 전송됩니다. 그리고 명령의 수행은 타이밍 신호 T4에서 시작되고요 이 경우에 메모리에 저장되어 있는 데이타는 직접 처리될 수 없기 때문에 여러 개의 마이크로 연산을 통해서 명령어가 수행이 됩니다. 암튼 각 명령어를 수행하는 데 필요한 제어 함수와 마이크로 연산에 대한 동작, 그리고 마지막에 흐름도를 이용하여 전체 명령어를 살표 보겠습니다.

AND 명령어
 이 명령어는 AC와 유효 주소로 지정된 메모리 워드의 각 비트쌍에 대하여 AND 논리 연산을 수행하고, 결과를 AC에 전송합니다. 이 명령어를 수행하기 위해 필요한 마이크로 연산은
 
D0T4 : DRM[AR]
D0T5 : AC←AC^DR, SC←0

AND명령어에 대한 제어 함수는 명령어 디코더의 출력 D0를 사용하는데, 시간 T4에서는 메모리의 피연산자를 DR레지스터에 전송하고 T5에서는 AC와 DR사이의 AND연산 결과를 AC에 저장하고, 동시에 SC를 클리어하여 새로운 명령어 사이클이 시작되도록 합니다.

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

D1T4 : DR←M[AR]
D1T5 : AC←AC+DR, E←Cout, SC←0

여기서는 명령어 디코더의 출력 D1과 함께 T4와 T5타이밍 신호를 사용합니다. 위와 같이 어떤 명령어가 메모리에서 FFETCH되고 디코딩된 다음에는 오직 하나의 디코드 추력만 활성화 되고 이것이 해당 명령어를 수행하는 데 필요한 마이크로 연산 순서를 결정합니다.

LDA명령어
 이 명령어는 유효 주소로 지정된 메모리 워드의 내용을  AC에 전송하고 베스에서 AC로의 직접 연결 경로가 없으므로 메모리 내용을 우선 DR로 읽어옵니다. 이후 가산/논리 회로를 거쳐 AC로 전송이 됩니다.

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

STA명령어
 이 명령어는 AC내용을 유효 주소로 지정된 메모리 워드로 전송하고 AC출력은 버스를 통해 메모리 입력과 연결되어 있습니다.

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

BUN명령어
 이 명령어는 프로그램의 수행을 유효 주소로 지정된 명령어로 옮기는 일을 합니다. 즉 순차적으로 증가하는 PC의 값을 다음 실행될 명령어의 주소로 무조건 JUMP를 시키는 거죠 AR의 유효 주소를 PC에 전송하고 SC를 0으로 클리어 하여 새로 지정된 다음 명령어를 FETCH 시킵니다.

D4T4 : PC←AR, SC←0

BSA명령어
 이 명령어는 Subroutine라고 하는 프로그램의 일부분으로 분기하는데 유용하게 사용이 됩니다. 현 PC에 저장된 다음 명령어의 주소가 유효 주소로 지정된 메모리에 저장을 합니다. 뭐 일반적으로는 스텍이나 프로세스 레지스터에 저장이 되지요 암튼 유효 주소보다 1 큰 값이 PC로 전송되어 서브루틴의 첫 명령어를 가리킵니다.

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

밑의 그림은 BSA명령어의 실행 예 입니다.

ISZ명령어
 이 명령어는 유효 주소로 지정된 워드 값을 하나 증가 시켜서 증가된 값이 0이면 PC도 하나 증가시켜 다음 명령어를 수행하고 메모리 워드를 직접 증가 할 수 없으므로 값을 DR로 읽어 온 후 증가 시킨 다음 다시 메모리에 저장을 합니다. 지금 우리가 알아보고 있는 명령어중에 가장 깁니다. (7개의 타이밍신호 : T0~T6 3비트 순차 카운터)

D6T4 : DR←M[AR]
D6T5 : DR←DR+1
D6T6 : M[AR]←DR, IF (DR=0) THEN (PC←PC+1), SC←0

제어 흐름도
 밑의 그림은 흐름도로 7가지 메모리 참조 명령어를 수행하는 데 필요한 모든 마이크로 연산을 보여주고 있습니다. 각 네모상자 위에 제어 함수가 표시되어 있고 T4, T5, T6에서 수행되는 마이크로 연산들은 각 명령어의 연산 코드에 따라 6가지 다른 경로를 형성합니다. 각 경로의 마지막 타이밍 신호에서는 순차 카운터가 0으로 클리어되어 다음 명령어 사이클을 위한 타이밍 신호 T0로 제어가 이동이 됩닏. 그리고 가장 긴 명령어(ISZ)를 수행하는 데에도 7개의 타이밍 신호로 충분하므로, 이 컴퓨터는 3비트 순차 카운터로 설계될 수 있습니다.

그럼 다음 블로그에는 입출려과 인터럽트에 대해서 알아보겠습니다.