귀도 반 로썸은 크리스마스에 심심해서 파이썬을 만들었다

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

귀도 반 로썸은 크리스마스에 심심해서 파이썬을 만들었다고 한다. 그래서 여러분도 심심한 김에 컴퓨터를 하나 만들었다.

이 컴퓨터는 아주 적은 종류의 명령어만 사용하는 프로세서 하나, 32바이트 메모리, 8비트 가산기(누산기), 5비트 프로그램 카운터(PC)로 이루어져 있다. 폰 노이만 구조를 따르므로 프로그램과 데이터가 같은 메모리를 공유한다.

프로그램 카운터는 다음에 실행할 명령어의 주소를 담고 있다. 각 명령어의 길이는 1바이트이고, 상위 3비트는 명령어의 종류를, 하위 5비트는 피연산자를 나타낸다. 피연산자는 언제나 메모리 주소(xxxxx)이다. 피연산자가 필요 없는 명령어도 있으며, 이 경우 하위 5비트는 아무 의미가 없다(-----). 각 명령어의 의미는 다음과 같다.

000xxxxx STA x 메모리 주소 x에 가산기의 값을 저장한다.
001xxxxx LDA x 메모리 주소 x의 값을 가산기로 불러온다.
010xxxxx BEQ x 가산기의 값이 0이면 PC를 x로 바꾼다.
011----- NOP 아무 연산도 하지 않는다.
100----- DEC 가산기의 값을 1 감소시킨다.
101----- INC 가산기의 값을 1 증가시킨다.
110xxxxx JMP x PC를 x로 바꾼다.
111----- HLT 프로그램을 종료한다.

처음에 PC와 가산기의 값은 모두 0이다. 명령어를 불러와 해독한 뒤, 그 명령어를 실행하기 전에 PC 값을 1 증가시킨다. 프로그램은 언제나 종료된다고 가정해도 된다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 32개의 줄로 주어지며, 각 줄은 메모리의 한 바이트(즉 코드)를 주소 0번부터 순서대로 8비트 2진수로 나타낸 것이다. 왼쪽에 있는 비트일수록 상위 비트이다. 입력은 파일의 끝(EOF)에서 종료된다.

출력

각 테스트 케이스마다 프로그램이 종료되었을 때의 가산기 값을 8비트 2진수로 한 줄에 출력한다. 이때도 왼쪽에 출력되는 비트일수록 상위 비트이다.

힌트

가산기는 8비트이므로 그 값이 범위를 넘으면 하위 8비트만 남기고 잘린다. 예를 들어 가산기 값이 11111111일 때 INC를 수행하면 00000000이 된다. 프로그램 카운터도 5비트이므로 같은 원리로, 값이 32가 되면 하위 5비트만 남아 0이 된다.