태그: BSA

이번에는 정보처리기사 필기 과목인 전자계산기 구조의 3사이클 마이크로 연산 명령을 살펴보아요.

AND
누산기(Accumulator)와 메모리의 내용을 논리곱하여 결과를 누산기에 저장하는 연산 명령
AC ← AC ∧ M[AD]
현재 플래그 레지스터는 F=1, R=0 인 실행 사이클
MBR에는 Fetch 사이클에서 읽어온 명령어가 있는 상태
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← M[MAR] 메모리에서 MAR이 지정한 위치의 값을 MBR에 전송
AC ← AC ∧ MBR 누산기의 값과 MBR의 값을 AND 연산하여 누산기에 전송

ADD
누산기와 메모리의 내용을 더하여 결과를 누산기에 저장하는 연산 명령
AC ← AC + M[AD]
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← M[MAR] 메모리에서 MAR이 지정한 위치의 값을 MBR에 전송
AC ← AC + MBR 누산기의 값과 MBR의 값을 더하여 누산기에 전송

LDA
메모리의 내용을 누산기로 로딩하는 연산 명령
AC ←  M[AD]
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← M[MAR] 메모리에서 MAR이 지정한 위치의 값을 MBR에 전송
AC ← 0 누산기를 0으로 초기화
AC ← AC + MBR 누산기의 값과 MBR의 값을 더하여 누산기에 전송

STA
누산기의 값을 메모리에 저장하는 연산 명령
M[AD] ←  AC
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← AC 누산기의 값을 메모리 버퍼 레지스터에 전송
M[MAR] ← MBR 메모리 버퍼 레지스터의 값을 메모리 주소 레지스터에 있는 주소로 전송

BUN
PC(프로그램 카운터)에 특정 주소를 전송하는 연산 명령, 무조건 분기 연산 명령
PC ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 프로그램 카운터에 전송

BSA
복귀 주소를 저장한 후에 부 프로그램을 호출하는 연산 명령
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← PC 프로그램 카운터의 값을 MBR에 전송
PC ← MBR[AD] 메모리 버퍼 레지스터의 명령어 주소를 프로그램 카운터에 전송
M[MAR] ← MBR 메모리 버퍼 레지스터의 값을 메모리 주소 레지스터의 주소에 전송
PC ← PC+1 프로그램 카운터 값을 1 증가

ISZ
메모리 값을 1 증가한 후에 0이면 현재 명령을 SKIP하는 연산 명령
MAR ← MBR[AD] 메모리 버퍼 레지스터(MBR)의 명령어의 주소를 메모리 주소 레지스터(MAR)에 전송
MBR ← M[MAR] 메모리에서 MAR이 지정한 위치의 값을 MBR에 전송
MBR ← MBR+1 메모리 버퍼 레지스터의 값을 1 증가
M[MAR] ← MBR 메모리 버퍼 레지스터의 값을 메모리 주소 레지스터의 주소에 전송
IF(MBR=0) THEN PC  ←  PC+1 MBR 값이 0이면 PC 값을 1 증가