基本上,它是一个双程汇编程序,我正在将入口点实现为给定的程序集文件。命令格式如下:作为汇编程序(用于编写语言)的Java程序:在循环中不会退出
Prog .ORIG
.ENT some,entry,point
some LD R0,entry
entry LD R1,point
point .FILL #42
.END some
相关部分是.ENT行。这就是汇编程序越来越多的问题。
第一遍处理.ENTs,但它不适用于任何超过两个参数(即多个逗号)。尽管如此,它确实可以用于两个操作数。具体.ENT部分的代码如下:
String comma = ",";
String entry = "";
String[] tempEntryArray = new String[2];
int indexOfComma = read.indexOf(comma);
int startingIndex = 17;
int numOperands = 1;
while (indexOfComma != -1) {
if ((indexOfComma-startingIndex) == 0) {
return "An operand must precede the comma.";
}
if (numOperands > 4) {
return "The .ENT psuedo-op on line " + lineCounter
+ " has more than 4 operands.";
}
entry = overSubstring(read, startingIndex, indexOfComma);
if (entry.contains(" ")) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " has a space in it.";
}
if (entry.length() > 6) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " is longer than 6 characters.";
}
machineTables.externalSymbolTable.put(entry, tempEntryArray);
entry = read.substring(indexOfComma + 1);
startingIndex = indexOfComma + 1;
indexOfComma = entry.indexOf(comma);
if (indexOfComma != -1) {
indexOfComma += (startingIndex - 1);
}
numOperands++;
}
entry = overSubstring(read, startingIndex, read.length());
if (entry.contains(" ")) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " has a space in it.";
}
if (entry.length() > 6) {
return "The operand \"" + entry + "\" on line "
+ lineCounter + " is longer than 6 characters.";
}
machineTables.externalSymbolTable.put(entry, tempEntryArray);
read是一个包含输入文件一行的字符串。 overSubstring是一种类似于substring的方法,但是如果它读取一个空字符串,它将返回一个空白字符。
对于大块代码我很抱歉,我知道错误信息可以做得更好,但是现在我关心的是这个特殊的代码挂在汇编器上,只要有两个以上的操作数(多于一个逗号)。
如果有人能帮我解决这个问题,我将非常感激。
谢谢。
您是否尝试过使用调试器? – 2011-03-08 03:22:47