#P12093. [NERC2024] BitBitJump
[NERC2024] BitBitJump
Description
BitBitJump 是一种单指令集计算机,仅包含一条指令:。该指令将内存的第 位复制到第 位,然后跳转到地址 。
我们考虑一台 16 位 BitBitJump 计算机,其内存包含 位,组织为 个 16 位字。字从 0 开始编号,每个字中的位从最低有效位(第 0 位)到最高有效位(第 15 位)编号。
该计算机有一个指令指针寄存器 ,执行从 开始。如果当前 ,计算机停止运行。否则,它将 指向的字作为 , 指向的字作为 , 指向的字作为 ,执行 \texttt{bbj a, b, c} 指令:将 -th 位(即 的低 4 位)从 -th 字(即 右移 4 位后的值)复制到 -th 位(即 的低 4 位)的 -th 字,并设置 。这里 表示按位与运算, 表示右移运算。注意 的值是在位复制操作之后从内存中读取的,因此如果指令修改了自己的 ,新值将被用作 。
我们称 -th 字(内存的第 到 位)为 。一个 是检查 IO-word 的值是否等于 的程序。它应在执行不超过 条指令后停止,如果 IO-word 的原始值等于 ,则将 IO-word 的最低位设为 1,否则设为 0。
请编写一个程序,为给定的 值生成 -比较器。
Input Format
输入包含一个十进制整数 (),表示要构建比较器的目标值。
Output Format
输出应包含 -比较器的内存转储。转储包含内存前 个字的值(),其余字(除 IO-word 外)填充为零。
每个字的值用 4 个字符的十六进制数表示,值之间用空格或换行符分隔。
0
fff0 0026 0003 fff1 0056 0006 fff2 0086 0009 fff3 00b6 000c fff4 00e6 000f
fff5 0116 0012 fff6 0146 0015 fff7 0176 0018 fff8 01a6 001b fff9 01d6 001e
fffa 0206 0021 fffb 0236 0024 fffc 0266 0027 fffd 0296 002a fffe 02c6 002d
ffff 02f6 0030
0004 fff0 0fff
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff 0000 fff0 0fff
0000 fff0 0fff
Hint
样例输出中的内存转储包含一个 0-比较器,由以下部分组成:
- 16 条指令:从 0 开始编号的第 条指令将输入字的第 位复制到自己 的第 6 位。如果复制的位为 0,则继续执行下一条指令;否则,下一条指令的编号将增加 64。
- 后续指令将第 0 个字的第 4 位(值为 1)复制到 IO-word 的第 0 位,并跳转到停止地址。
- 16 个未使用的字,填充为 0。
- 16 条相同的指令(从第 67 个字开始):每条指令将第 0 个字的第 0 位(值为 0)复制到 IO-word 的第 0 位,并跳转到停止地址。
京公网安备 11011102002149号