题面
上次说道 Smith 家的一台古老的计算机,由于 Smith 是一名软硬件全栈大佬,他成功扩展了那台计算机,现在它可以执行更多的指令。
魔改后的机器一共有 26 个无差别的寄存器,分别为 AX
, BX
, , ZX
,在指令中他们可以互相替代,下面的表格列出了所有支持的指令。
数据操纵指令:
指令 | 中文名 | 格式 | 解释 |
---|---|---|---|
IN | 读操作指令 | IN AX,number | 读数据存储在 AX 中,AX=number |
OUT | 写操作指令 | OUT AX | 输出 AX 的值 |
MOV | 传送指令 | MOV AX,BX | AX=BX |
XCHG | 交换指令 | XCHG AX,BX | 交换 AX 和 BX 寄存器中储存的值 |
运算指令:
指令 | 中文名 | 格式 | 解释 |
---|---|---|---|
ADD | 加法指令 | ADD AX,BX | AX=AX+BX |
SUB | 减法指令 | SUB AX,BX | AX=AX-BX |
MUL | 乘法指令 | MUL AX,BX | AX=AX * BX |
DIV | 除法指令 | DIV AX,BX | AX=AX/BX(整除) |
MOD | 取模指令 | MOD AX,BX | AX=AX%BX |
AND | 位与指令 | AND AX,BX | AX=AX&BX |
OR | 位或指令 | OR AX,BX | AX=AX|BX |
XOR | 异或指令 | XOR AX,BX | AX=AX^BX |
每次运算的时候,第一个操作数都会被修改,这样写代码太难受了,于是 Smith 为所有的运算指令都添加了第二种三参数调用的形式,以下仅以加法指令和减法指令为例,但请一定记住所有运算指令均可如此调用:
指令 | 中文名 | 格式 | 解释 |
---|---|---|---|
ADD | 扩展加法指令 | ADD AX,BX,CX | AX=BX+CX |
SUB | 扩展减法指令 | SUB AX,BX,CX | AX=BX-CX |
例如:以下代码可以实现表达式 (2+3*5)/6
和表达式 (2+3*5)%6
的计算并输出计算结果。
IN AX,3
IN BX,5
MUL AX,BX
IN CX,2
ADD CX,AX
IN BX,6
DIV DX,CX,BX
OUT DX
MOD DX,CX,BX
OUT DX
输入用这种特殊标记编程语言编写的一段代码,请编写一个翻译器,对代码进行翻译,输出最后运行结果。
输入格式
输入代码片段。
注意:读的数据均为 int
型整数。所有被计算的数值(包括中间值)均保证在int
范围内。
输入保证不包含任何多余的空白字符,在开始执行前,所有寄存器的值可以视为已经清零,过程中不存在非法操作(例如除以 0)。
- 对于 30% 的数据指令数 ,不存在三参数调用形式
IN
指令的参数均为非负整数; - 对于 70% 的数据指令数 ,不存在三参数调用形式;
- 对于 85% 的数据指令数 ,没有限制;
- 对于 100% 的数据指令数 ,没有限制;
输出格式
对于每个 OUT
指令,输出一行表示结果。
样例
输入
IN AX,3 IN BX,5 MUL AX,BX IN CX,2 ADD CX,AX IN BX,6 DIV DX,CX,BX OUT DX MOD DX,CX,BX OUT DX
输出
2 5
输入
IN AX,-2 IN BX,-3 MOD BX,AX OUT BX
输出
-1
输入
IN AX,3 IN BX,5 MUL AX,BX IN CX,2 ADD CX,AX IN BX,6 DIV CX,BX OUT CX
输出
2