마이크로프로세서 시뮬레이션
면접 대비시간 제한1초메모리 제한128 MB
256워드 hex 메모리 덤프에서 4비트 마이크로프로세서를 모의 실행하고 STP 명령에 도달하면 최종 메모리 상태를 출력한다.
문제
다음과 같은 특징을 가진 작은 마이크로프로세서를 생각하자.
- 한 워드(word) 는 4비트다.
- 주소는 두 워드로 이루어지며, 항상 상위 워드가 먼저 온다. 즉, 두 워드짜리 주소의 상위 워드는 메모리에서 언제나 더 낮은 주소(앞쪽 워드)에 놓인다.
- 메모리는 256워드다.
- 누산기(accumulator)는 A와 B 두 개가 있으며, 각각 한 워드를 저장한다.
- 명령어 코드는 아홉 개다. 각 명령어는 명령을 나타내는 코드를 저장하기 위해 최소 한 워드를 사용한다. 이 중 네 개의 명령어는 인수(argument)를 가지며 추가로 두 워드를 더 사용한다.
4비트 수는 10진수로 0부터 15까지의 값을 가질 수 있다. 이를 통상적인 방식의 16진수로 표기한다. 즉, A는 10, B는 11 등을 뜻한다.
아홉 개의 명령어는 다음과 같다.
마이크로프로세서는 항상 주소 00에 있는 명령부터 실행을 시작한다. 정지(STP) 명령을 만날 때까지 명령을 순서대로 실행한다.
아래 예시는 일부 프로그램과 그 동작을 보여 준다.
입력
입력은 정확히 256개의 16진수 문자로 이루어진 여러 줄로 구성된다. 각 줄은 주소 00에서 시작하여 주소 FF에서 끝나는 메모리의 내용이다. 입력의 끝은 주소 00에 정지 명령(문자 "8")이 놓인 메모리 상태로 표시된다. 입력으로 주어지는 프로그램은 결코 "메모리의 끝을 벗어나지" 않는다. 즉, 주소 F0부터 FF까지(양 끝 포함)에 위치한 명령을 실행하는 일은 없다.
출력
각 메모리 상태에 대해, 주소 00부터 실행을 시뮬레이션한다. 정지 명령에 도달하면 메모리의 내용을 256개의 16진수 문자로 이루어진 하나의 문자열로 출력하고, 그 뒤에 줄바꿈 문자를 덧붙인다.