285 人解决,347 人已尝试。
411 份提交通过,共有 1573 份提交。
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