288 人解决,351 人已尝试。
421 份提交通过,共有 1588 份提交。
2.5 EMB 奖励。
单点时限: 2.0 sec
内存限制: 512 MB
上次说道 Smith 家的一台古老的计算机,由于 Smith 是一名软硬件全栈大佬,他成功扩展了那台计算机,现在它可以执行更多的指令。
魔改后的机器一共有 26 个无差别的寄存器,分别为 AX, BX, $\ldots$, 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)。
IN 指令的参数均为非负整数;对于每个 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