这道题要求我们设计一个简单的虚拟机解释器,能够解析和执行一系列虚拟指令。虚拟机包含32个32位的整形寄存器(a0到a31),并且只使用寄存器和立即数进行计算。指令可以分为几种类型:MOV dst src 用于将源(src)赋值给目标寄存器(dst);ADD dst src0 src1 将两个源相加;SUB dst src0 src1 将第一个源减去第二个源;MUL dst src0 src1 将两个源相乘;DIV dst src0 src1 将第一个源除以第二个源并向下取整;PRINT dst 用于输出目标寄存器的值。输入为若干行指令,输出为对每条PRINT指令的寄存器值。
模拟题,根据题意模拟即可。
需要注意的几个点:
小明这学期有一门专业必修课,叫做汇编语言,这不准备结课了嘛,老师布置了一个大作业,要求设计一种虚拟机解释器,能解析并执行以下虚拟指令。
虚拟机约定:32位的整形寄存器有a0,a1,..a31,共32个寄存器;
整个虚拟机只有寄存器和立即数参与计算。
规则集(dst一定为寄存器,src为寄存器或十进制正整数,运算结果存在负数场景):
(1)MOV dst src含义:dst = src
(2)ADD dst src0 src1含义:dst = src0 + src1
(3)SUB dst src0 src1含义:dst = src0 - src1
(4)MUL dst src0 src1含义:dst = src0 * src1
(5)DIV dst src0 src1含义:dst = src0 / src1(结果向下取整)
(6)PRINT dst含义:打印dst寄存器值
规定:不用考虑计算溢出(用例保证),指令数最多100条,至少一条PRINT指令,寄存器保证先赋值再引用。不用考虑小数以及除0错误。
若干行,每行一条指令
对输入的每行指令,若为PRINT指令,则输出打印一行,该行中包括一个整数,表示寄存器的值
输入
MOV a1 100
MOV a2 200
ADD a3 a1 100
SUB a4 a3 a2
PRINT a4
输出
0
解释
a1=100
a2=200
a3=a1(100)+100=200a4=a3(200)-a2(200)=0
输入
MOV a1 100
MOV a2 200
PRINT a1
ADD a3 a1 100
SUB a4 a3 a2
PRINT a4
输出
100
0
1s, 1024KiB for each test case.