NumberFormatException java 汇编程序

时间:2021-01-08 15:53:32

标签: java assembly

我一直在为我的 VM 使用 Java 编写汇编程序,但我不知道为什么会发生这种情况,因为提供的字符串是 1。我尝试修剪它,但它仍然抛出此错误。我发现的所有内容都无法解决此问题,错误出现在我设置 tmpa 的第 117 行,请帮助!
汇编.java

package vm;

import java.util.Scanner;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
class asm {
    public static int pc = 0;
    public static void main(String[] args){
        String a = "";
        String filename = "prog.asm";
        String tmp = "";
        try
        {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line;
            while ((line = reader.readLine()) != null)
            {
                tmp += line;
                tmp += " ";
            }
            reader.close();
        }
        catch (Exception e)
        {
            System.err.format("Exception occurred trying to read '%s'.", filename);
            e.printStackTrace();
            System.exit(1);
        }
        tmp = tmp.replace(", ", " ");
        tmp = tmp.replace(",", " ");
        tmp = tmp.replace(" ,", " ");
        String[] prog = tmp.split(" ");
        for(int i=0;i<prog.length;i++){
            System.out.println(
                "CURRENT POS: " + i + 
                ", " + prog[i]
            );
        }
        while(pc < prog.length){
            String d = prog[pc];
            if(!((prog[pc].substring(0, 1)).equals("$")) && !((prog[pc].substring(0, 1)).equals("r"))){
                System.out.println("FOUND INSTR " + prog[pc].substring(0, 1));
                a += " 0x";
            }
            if(prog[pc].equals("hlt")) {
                a += "00000000";
            }else if(prog[pc].equals("mov")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "02";
                }else{
                    a += "01";
                }
            }else if(prog[pc].equals("add")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "04";
                }else{
                    a += "03";
                }
            }
            else if(prog[pc].equals("sub")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "06";
                }else{
                    a += "05";
                }
            }
            else if(prog[pc].equals("mul")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "08";
                }else{
                    a += "07";
                }
            }
            else if(prog[pc].equals("div")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "0A";
                }else{
                    a += "09";
                }
            }else if(prog[pc].equals("psh")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "0C";
                }else{
                    a += "0B";
                }
            }else if(prog[pc].equals("psh")){
                if(prog[pc].substring(0, 1).equals("r")){
                    a += "0E";
                }else{
                    a += "0D";
                }
            }else if(prog[pc].substring(0, 1).equals("$")){
                int tmpa = Integer.parseInt(prog[pc + 1].substring(1, 2)) - 1;
                String tmpc="";
                char[] tmpd = prog[pc].toCharArray();
                for(int i=0;i<tmpd.length;i++) {
                    if(tmpd[i] == '$') {}
                    else if(tmpd[i] == '#') break;
                    else tmpc += tmpd[i];
                }
                a += tmpa;
                a += "0";
                if(tmpc.length() > 3) {
                    a += tmpc;
                }else if(tmpc.length() > 2) {
                    a += "0" + tmpc;
                }else if(tmpc.length() > 1) {
                    a += "00" + tmpc;
                }else if(tmpc.length() > 0) {
                    a += "000" + tmpc;
                }
                pc++;
            }
            else if(prog[pc].substring(0, 1).equals("r")) {
                System.out.println(prog[pc + 1].substring(1, 2));
                int tmpa = Integer.parseInt(prog[pc + 1].substring(1, 2).trim()); << Error
                int tmpb = Integer.parseInt(prog[pc].substring(1, 2).trim());
                a += tmpb;
                a += tmpa;
                a += "0000";
                pc++;
            }
            pc++;
        }
        System.out.println(a);
    }
}

程序.asm

mov $1#, r1
mov $1#, r2
add r1, r2
psh r1
hlt

1 个答案:

答案 0 :(得分:1)

当您的代码在“hlt”行上运行并且检查的子字符串包含一个不是数字的“l”字母时,因此 Integer.ParseInt 无法将“l”字母转换为整数。

相关问题