다음과 같은 특징을 가진 작은 마이크로프로세서를 생각하자.
4비트 수는 10진수로 0부터 15까지의 값을 가질 수 있다. 이를 통상적인 방식의 16진수로 표기한다. 즉, A는 10, B는 11 등을 뜻한다.
아홉 개의 명령어는 다음과 같다.
| 코드 | 워드 수 | 설명 |
|---|---|---|
| 0 | 3 | LD: 인수로 지정된 메모리 주소의 값을 누산기 A에 적재한다. |
| 1 | 3 | ST: 누산기 A의 값을 인수로 지정된 메모리 주소에 기록한다. |
| 2 | 1 | SWP: 누산기 A와 B의 값을 서로 맞바꾼다. |
| 3 | 1 | ADD: 누산기 A와 B의 값을 더한다. 합의 하위 워드는 A에, 상위 워드는 B에 저장한다. |
| 4 | 1 | INC: 누산기 A를 1 증가시킨다. 오버플로가 허용된다. 즉, F를 증가시키면 0이 된다. |
| 5 | 1 | DEC: 누산기 A를 1 감소시킨다. 언더플로가 허용된다. 즉, 0을 감소시키면 F가 된다. |
| 6 | 3 | BZ: 누산기 A가 0이면 다음에 실행할 명령을 인수로 지정된 주소의 명령으로 삼는다. A가 0이 아니면 인수를 무시하고 아무 일도 일어나지 않는다. |
| 7 | 3 | BR: 다음에 실행할 명령을 인수로 지정된 주소의 명령으로 삼는다. |
| 8 | 1 | STP: 프로그램 실행을 멈춘다. |
마이크로프로세서는 항상 주소 00에 있는 명령부터 실행을 시작한다. 정지(STP) 명령을 만날 때까지 명령을 순서대로 실행한다.
아래 예시는 일부 프로그램과 그 동작을 보여 준다.
| 프로그램 | 설명 |
|---|---|
| 01A8 | 메모리 주소 1A(10진수로 26)의 값을 누산기 A에 적재하고 정지한다. |
| 01A512F8 | 메모리 주소 1A(10진수로 26)의 값을 누산기 A에 적재하고, 1 감소시킨 뒤, 그 결과를 메모리 주소 2F에 저장하고 정지한다. |
입력은 정확히 256개의 16진수 문자로 이루어진 여러 줄로 구성된다. 각 줄은 주소 00에서 시작하여 주소 FF에서 끝나는 메모리의 내용이다. 입력의 끝은 주소 00에 정지 명령(문자 "8")이 놓인 메모리 상태로 표시된다. 입력으로 주어지는 프로그램은 결코 "메모리의 끝을 벗어나지" 않는다. 즉, 주소 F0부터 FF까지(양 끝 포함)에 위치한 명령을 실행하는 일은 없다.
각 메모리 상태에 대해, 주소 00부터 실행을 시뮬레이션한다. 정지 명령에 도달하면 메모리의 내용을 256개의 16진수 문자로 이루어진 하나의 문자열로 출력하고, 그 뒤에 줄바꿈 문자를 덧붙인다.