#P16651. [Ukiepc2016]Compiler
[Ukiepc2016]Compiler
题目描述
几乎所有计算机都有一个共同点:无论是简单的栈式计算器、使用 6502 处理器的 BBC Micro,还是最新的 Android 手机,都需要某种程序把高级语言或汇编语言转换成机器代码。
UKIEPC 最近设计了一款自己的处理器。这款处理器很容易装载程序,但功能并不复杂,因为它只有一个目标:在一块创新的激光显示板上显示一个数字。
处理器拥有以下存储空间:
- 三个 8 位寄存器:
A、X和Y; - 一个容量无限的栈。
程序开始运行时,三个寄存器中的值均为未知值,栈为空。
处理器支持以下六类指令:
PH <reg>:把寄存器<reg>(A、X或Y)中的值压入栈中。PL <reg>:弹出栈顶元素并存入寄存器<reg>。如果执行该指令时栈为空,程序立即终止。AD:从栈中弹出两个值,将它们的和的最低 8 位压回栈中。换言之,加法结果对 取模。ZE <reg>:把寄存器<reg>设为 。ST <reg>:把寄存器<reg>设为 。DI <reg>:把寄存器<reg>中的值发送到激光显示板,并立即退出程序。
由于存储空间有限,磁盘中最多只能保存 40 条指令。第 40 条之后的任何指令都不会被执行。
给定一个数,请输出一段程序,使处理器能够在显示板上显示该数。
输入格式
一行一个整数 (),表示需要显示的数字。
输出格式
输出不超过 40 行,每行包含一条合法指令。
这些指令按顺序执行后,必须输出数字 。最后一条实际执行的指令必须是 DI 指令。
判题说明: 本题为构造题,需要特殊判题程序检查所输出指令是否合法以及执行结果是否为 。
样例 1
输入
2
输出
ST A
ST X
PH A
PH X
AD
PL Y
DI Y
样例 2
输入
5
输出
ST X
PH X
PH X
PH X
AD
PL Y
PH Y
PH Y
AD
AD
PL A
DI A