#P1506. 2024.05.08-暑期实习-第一题-塔子哥的汇编作业

2024.05.08-暑期实习-第一题-塔子哥的汇编作业

题目描述

\qquad塔子哥这学期有一门专业必修课,叫做汇编语言,这不准备结课了嘛,老师布置了一个大作业,要求设计一种虚拟机解释器,能解析并执行以下虚拟指令。

\qquad虚拟机约定:32位的整形寄存器有a0a_0,a1a_1,..a31a_{31},共32个寄存器;

\qquad整个虚拟机只有寄存器和立即数参与计算。

\qquad规则集(dst一定为寄存器,src为寄存器或十进制正整数,运算结果存在负数场景):

\qquad(1)MOV dst src\quad含义:dst = src

\qquad(2)ADD dst src0 src1\quad含义:dst = src0 + src1

\qquad(3)SUB dst src0 src1\quad含义:dst = src0 - src1

\qquad(4)MUL dst src0 src1\quad含义:dst = src0 * src1

\qquad(5)DIV dst src0 src1\quad含义:dst = src0 / src1(结果向下取整)

\qquad(6)PRINT dst\quad含义:打印dst寄存器值

\qquad规定:不用考虑计算溢出(用例保证),指令数最多100条,至少一条PRINT指令,寄存器保证先赋值再引用。不用考虑小数以及除0错误。

输入描述

\qquad若干行,每行一条指令

输出描述

\qquad对输入的每行指令,若为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

Limitation

1s, 1024KiB for each test case.