상수 표기 변환

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

문제

같은 아키텍처, 심지어 같은 프로세서를 대상으로 하는 어셈블리 언어도 여러 가지가 있다. 문법 규칙이 다르고, 지시어(의사 명령)가 다르고, 연산 코드의 니모닉도 다르다. 정수 상수를 적는 방법마저 다르다.

인텔 IA-32 아키텍처(x86, 펜티엄, 제온)를 다루는 어떤 어셈블러는 숫자 뒤에 붙인 문자로 진법을 나타내고, 다른 어셈블러는 C/C++/자바 방식의 상수를 쓴다.

1f34h     = 0x1f34   (16진수, C/C++/자바는 앞에 0x를 붙인다)
11001100b = 0xcc     (2진수, C/C++/자바에는 같은 표기가 없어 16진수로 적는다)
377o      = 0377     (8진수, C/C++/자바는 앞에 0을 붙인다)
925       = 925      (10진수)
925d      = 925      (역시 10진수)

상수를 저장할 공간을 잡고 초기화하는 지시어도 다르다.

db =    .byte        (1바이트)
dw =    .word        (2바이트)
dd =    .long        (4바이트)
dq =    .quad        (8바이트)

입력의 각 줄에는 어셈블러 "A"(인텔 IA-32 방식)의 표기로 쓴 저장 공간 할당 지시어가 하나씩 들어 있다. 각 줄을 어셈블러 "B"(C/C++/자바 방식)가 요구하는 표기로 바꿔서 출력하라.

입력

각 줄은 순서대로 다음을 담는다.

  • 공백 문자(스페이스나 탭) 0개 이상
  • 소문자 지시어 db, dw, dd, dq 중 하나
  • 공백 문자 1개 이상
  • 상수 1개 이상. 상수 사이는 쉼표 하나로 구분하고, 쉼표 앞뒤에 공백 문자가 0개 이상 올 수 있다
  • 공백 문자 0개 이상
  • 줄 끝 문자

상수는 다섯 가지 중 하나로 적는다. 16진 숫자 뒤에 h, 2진 숫자 뒤에 b, 8진 숫자 뒤에 o, 10진 숫자 뒤에 d, 또는 접미사 없는 10진 숫자이다. 진법을 나타내는 문자는 맨 뒤 한 글자뿐이므로 16진 상수는 숫자가 아닌 문자로 시작하기도 한다. each는 16진 상수 eac이다. 상수에 쓰인 영문자는 모두 소문자이다.

한 줄은 100자를 넘지 않는다. 데이터가 있는 마지막 줄 다음에는 공백 문자만 있고 줄 끝 문자가 오는 줄이 하나 온다.

출력

입력 줄마다 한 줄씩 출력한다. 출력 줄에는 그 입력 줄에 대응하는 어셈블러 "B"의 표기가 순서대로 들어간다.

  • 탭 문자 하나
  • 입력 줄의 지시어에 대응하는 소문자 지시어 .byte, .word, .long, .quad 중 하나
  • 탭 문자 하나
  • 상수 1개 이상. 상수 사이는 쉼표 하나와 공백 하나로 구분한다
  • 줄 끝 문자

각 상수는 어셈블러 "B"가 지원하는 표기로 적되, 어셈블러 "B"에 같은 진법이 있으면 입력 상수의 진법을 그대로 쓴다. 2진 상수는 16진 표기로 바꾼다.

상수는 값으로 바꾼 뒤 그 진법으로 다시 적는다. 16진수는 0x 뒤에 소문자 16진 숫자를, 8진수는 0 뒤에 8진 숫자를, 10진수는 10진 숫자를 적으며, 접두사 뒤에 0을 덧붙이지 않는다. 값이 0이면 16진수는 0x0, 8진수는 00, 10진수는 0이다.

상수가 지시어로 잡은 공간에 들어가는지는 따지지 않는다. 99999는 1바이트에 들어가지 않지만 db 99999도 올바른 입력 줄이다.