#P1049. Microprocessor Simulation

    ID: 50 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>图结构拓扑排序搜索枚举模拟Greater New York 2001

Microprocessor Simulation

描述

考虑一个具有以下属性的小型微处理器:

每个字为 4 位。

地址为两个字。高位字总是在前面。也就是说,一个双字地址的高位字总是占据内存的较低位置。

内存为 256 个字。

有两个累加器,A 和 B,每个累加器存储一个字。

有九条指令代码。每条指令至少需要一个字来存储指定指令的代码。四条指令有参数,并且需要额外的两个字。

每个 4 位数字的取值范围是 0 到 15(包含),以十进制表示。我们将以十六进制的常见方式来书写这些数字,即 A 表示 10,B 表示 11,依此类推。

这九条指令如下:

代码 字数 描述
0 3 LD:将指定参数处内存的内容加载到累加器 A 中。
1 3 ST:将累加器 A 的内容写入由参数指定的内存位置。
2 1 SWP:交换累加器 A 和 B 的内容。
3 1 ADD:将累加器 A 和 B 的内容相加。和的低位字存储在 A 中,高位字存储在 B 中。
4 1 INC:累加器 A 加 1。允许溢出;也就是说,对 F 加 1 得到 0。
5 1 DEC:累加器 A 减 1。允许下溢;也就是说,对 0 减 1 得到 F。
6 3 BZ:如果累加器 A 为零,则执行由参数指定位置的下一条指令。如果 A 不为零,则忽略该参数,不进行任何操作。
7 3 BR:执行由参数指定位置的下一条指令。
8 1 STP:停止程序执行。

微处理器总是从位置 00 开始执行指令。它按顺序执行指令,直到遇到停止指令。

下面的示例展示了部分程序及其效果。

程序 描述
01A8 将内存位置 1A(十进制 26)的内容加载到累加器 A 中,然后停止。
01A512F8 将内存位置 1A(十进制 26)的内容加载到累加器 A 中,对其减 1,将结果存储到内存位置 2F,然后停止。

输入

输入将由几行恰好 256 个十六进制字符组成。每行是内存的内容,从地址 00 开始,到地址 FF 结束。当地址 00 处出现停止指令(“8”)时,表示输入结束。输入的程序永远不会“超出内存范围”,也就是说,你永远不会执行位于地址 F0 到 FF(包含)之间的指令。

0102011311321128FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

输出

对于每个内存状态,你应该模拟从地址 00 开始的执行过程。当遇到停止指令时,你应该将内存的内容以单个由 256 个十六进制字符组成的字符串形式输出,后面跟一个换行符。

0102011311321128FF1E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

来源

大纽约 2001