Problem1382--实现一个反汇编器,将二进制指令,翻译成汇编指令。

1382: 实现一个反汇编器,将二进制指令,翻译成汇编指令。

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 10  Solved: 2
[Submit] [Status] [Web Board] [Creator:]

Description

实现一个反汇编器,将二进制指令,翻译成汇编指令。汇编指令集如下:

操作符   操作数个数      说明
HALT      0,HALT 终止
IN         0,IN 从标准输入中读入整型值并压栈
OUT 0,OUT 从栈中弹出,从标准输出
ADD 0,ADD 从栈中弹出a,弹出b,计算b+a,并将结果压入栈中
SUB 0,SUB 从栈中弹出a,弹出b,计算b-a,并将结果压入栈中
MUL 0,MUL 从栈中弹出a,弹出b,计算b*a,并将结果压入栈中
DIV 0,DIV 从栈中弹出a,弹出b,计算b/a,并将结果压入栈中
DUP 0,DUP 压入栈顶值的拷贝
LD 0,LD 从栈中弹出地址,并压入改地址里的整数值
ST 0,ST 从栈中弹出值,再弹出地址,并将该值存储到该地址中
LDC 1,LDC value 压入value
JLT 1,JLT loc 弹出value,检测value是否小于0,如果小于,则pc=loc
JLE 1,JLE loc 弹出value,检测value是否小于等于0,如果小于等于,则pc=loc
JGT 1,JGT loc 弹出value,检测value是否大于0,如果大于,则pc=loc
JGE 1,JGE loc 弹出value,检测value是否大于等于0,如果大于等于,则pc=loc
JEQ 1,JEQ loc 弹出value,检测value是否等于0,如果等于,则pc=loc
JNE 1,JNE loc 弹出value,检测value是否不等于0,如果不等于,则pc=loc
JMP 0,JMP 不用弹出value,pc=loc


主程序中输出二进制指令的指令码,输出对应的汇编指令。
例如输入:
17   123
17是JMP指令的指令码(十进制的方式,请看提示),123是操作数。那么经过反编译器运行之后输出:
JMP  123
也可以输出二进制形式指令,例如输入
00000000
那么输出:
HALT



Input

17 123


Output

17 123
JMP     123

Sample Input

00000000

Sample Output

00000000
HALT

HINT

// 枚举类型的二进制指令集
enum BinIns
{
    binHalt, binIn, binOut, binAdd, binSub, binMul, binDiv,
    binDup,
    binLd, binSt, binLdc, binJlt, binJle, binJgt, binJge, binJeq, binJne, binJmp,
    binInvalid
};

// 二进制指令结构体
// 指令码+操作数
struct Instruction
{
    BinIns op;  // 指令码只占一个字节
    int    arg; // 操作数,占四个字节
};


Source/Category

 

[Submit] [Status]