我正在使用java实现一个简单的MIPS模拟器。我的问题是在取指令步骤中,我应该取一条指令并将其转换为32位二进制代码,以便能够确定前6位是操作码,接下来的5位是rs(源寄存器),依此类推。
起初我以为我只会制作一个arraylist并添加我的程序将要支持的15条指令然后再制作另一个arraylist并添加32个可用的寄存器然后当用户输入他的代码时我循环输入的字符串比较它与我的指令和数组中的寄存器名称,但后来我意识到我不知道我将要比较的用户代码中的哪些字符我的意思是(添加$ s1 $ s4 $ s5)将不同于( addi $ t8 $ zero 1)所以我不能每次用指令数组检查前3个字符的子串,然后检查下3个,因为你看到零寄存器可能占用更大的位置等等
我的第二种方法是通过其操作码和寄存器通过二进制值定义指令,然后由用户将给定指令转换为二进制并进行比较。还有其他可能的或可能更简单的方法吗?
答案 0 :(得分:0)
如果我理解正确,那么您的问题是如何从用户的汇编程序代码到MIPS解释的机器代码。这就是令牌化器派上用场的地方。使用StringTokenizer(http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html)将用户输入转换为字节代码字符串,并将后者提供给您的MIPS,完全按照您在问题中的建议。