Kleofáš의 프로세서

시간 제한1초메모리 제한512 MB

요약
레지스터 26개를 가진 비트 연산 프로세서에서 임의의 64비트 값이 담긴 A에 8을 더하는 64개 미만 명령의 프로그램을 작성한다.
난이도

보통10점 중 7점

유형
비트 연산, 수학, 구현
정답자
아직 제출이 없습니다

문제

예비 과학자 Kleofáš는 최근 새 프로세서를 개발했다. 이 프로세서에는 A부터 Z까지 이름이 붙은 26개의 레지스터가 있다. 각 레지스터는 64비트 부호 없는 정수를 저장하는 변수이다.

이 프로세서는 매우 단순하다. 아래 표에 나온 명령어만 지원한다. (모든 명령어에서 R은 레지스터 이름이고, X는 레지스터 이름이거나 64비트 부호 없는 정수 상수이다.)

구문의미
mov R X값 X를 R에 저장한다.
and R XR과 X의 값을 비트 단위 and 연산하여 R에 저장한다.
or R XR과 X의 값을 비트 단위 or 연산하여 R에 저장한다.
xor R XR과 X의 값을 비트 단위 xor 연산하여 R에 저장한다.
not RR의 값을 비트 단위 not 연산하여 R에 저장한다.
shl R XR의 값을 왼쪽으로 X비트 시프트하여 결과를 R에 저장한다.
shr R XR의 값을 오른쪽으로 X비트 시프트하여 결과를 R에 저장한다.

참고:

  • not을 제외한 모든 명령어에서 두 번째 인수가 레지스터 이름이면, 그 레지스터의 내용은 변하지 않는다.
  • shl이나 shr을 0이 아닌 두 번째 인수로 호출하면, 첫 번째 인수의 시프트 결과는 0으로 채워진다. 따라서 두 번째 인수가 64 이상이면 첫 번째 인수와 관계없이 결과는 항상 0이다.

예시 과제:

레지스터 A에 0과 15 사이의 임의의 입력 값이 들어 있고, 나머지 레지스터는 모두 0이라고 하자. A에 켜진 비트의 개수가 홀수이면 Z를 1로, 그렇지 않으면 0으로 만드는 프로그램을 작성하라.

쉬운 과제:

레지스터 A에 임의의 입력 값이 들어 있고, 나머지 레지스터는 모두 0이라고 하자. A의 값을 8만큼 증가시키는(필요하면 2^64로 나눈 나머지를 계산하는) 프로그램을 작성하라. 프로그램이 끝난 뒤 다른 레지스터에는 어떤 값이 들어 있어도 된다. 프로그램은 64개 미만의 명령어로 이루어져야 한다.

입력

이 문제에는 입력이 없다.

출력

프로그램을 텍스트 파일로 제출한다. 파일의 각 줄은 완전한 명령어 하나를 포함하거나 공백만으로 이루어질 수 있다.

예제1

  1. 예제 1

    입력
    예상 출력
    mov B A
    shl B 63
    shr B 63
    
    mov C A
    shl C 62
    shr C 63
    
    mov D A
    shl D 61
    shr D 63
    
    mov E A
    shl E 60
    shr E 63
    
    mov Z B
    xor Z C
    xor Z D
    xor Z E