实现一个汇编器,将汇编指令解释为二进制。采用的汇编指令集如下:
操作符 操作数个数 说明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
主函数中输入汇编指令,输出二进制指令 。
输出格式如下:
0 00000000
0表示二进制指令的指令码, 00000000表示对应的二进制形式(字符串)。
如果指令有操作数,那么输出如下:
17 00010001 123 00000000000000000000000001111011
17表示指令码,00010001 指令码对应的二进制形式(字符串)123是操作数, 00000000000000000000000001111011操作数对应的二进制形式。