我正在填充地图,每个条目都成为每个条目。我不知道这是怎么发生的。
public Map<Register, String> regFileList = new HashMap<Register, String>();
/** $zero always zero (by hardware) */
public Register zero = new Register(0);
// ....加上声明的所有其他寄存器......
private void populateRegFileList(){
zero.setRegNumber(0);
zero.setRegName("$zero");
zero.setWord("0x00000000");
regFileList.put(zero, zero.getWord());
at.setRegNumber(1);
at.setRegName("$at");
at.setWord("0x00000000");
regFileList.put(at, at.getWord());
v0.setRegNumber(2);
v0.setRegName("$v0");
v0.setWord("0x00000000");
regFileList.put(v0, v0.getWord());
a0.setRegNumber(3);
a0.setRegName("$a0");
a0.setWord("0x00000000");
regFileList.put(a0, a0.getWord());
a1.setRegNumber(4);
a1.setRegName("$a1");
a1.setWord("0x00000000");
regFileList.put(a1, a1.getWord());
a2.setRegNumber(5);
a2.setRegName("$a2");
a2.setWord("0x00000000");
regFileList.put(a2, a2.getWord());
a3.setRegNumber(6);
a3.setRegName("$a3");
a3.setWord("0x00000000");
regFileList.put(a3, a3.getWord());
a4.setRegNumber(7);
a4.setRegName("$a4");
a4.setWord("0x00000000");
regFileList.put(a4, a4.getWord());
s0.setRegNumber(8);
s0.setRegName("$s0");
s0.setWord("0x00000000");
regFileList.put(s0, s0.getWord());
s1.setRegNumber(9);
s1.setRegName("$s1");
s1.setWord("0x00000000");
regFileList.put(s1, s1.getWord());
s2.setRegNumber(10);
s2.setRegName("$s2");
s2.setWord("0x00000000");
regFileList.put(s2, s2.getWord());
s3.setRegNumber(11);
s3.setRegName("$s3");
s3.setWord("0x00000000");
regFileList.put(s3, s3.getWord());
k0.setRegNumber(12);
k0.setRegName("$k0");
k0.setWord("0x00000000");
regFileList.put(k0, k0.getWord());
sp.setRegNumber(13);
sp.setRegName("$sp");
sp.setWord("0x00000000");
regFileList.put(sp, sp.getWord());
fp.setRegNumber(14);
fp.setRegName("$fp");
fp.setWord("0x00000000");
regFileList.put(fp, fp.getWord());
ra.setRegNumber(15);
ra.setRegName("$ra");
ra.setWord("0x00000000");
regFileList.put(ra, ra.getWord());
System.out.println(regFileList);
}
打印:{$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000 ,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000,$ ra = 0x00000000}
关于这是如何发生的任何想法?如果我将print语句移动到更早的点,它会输出正确数量的条目,但都是相同的。
答案 0 :(得分:0)
您的代码不完整,因为您没有显示正在创建的实例的位置。
但是,有关您的问题的几点注意事项:
答案 1 :(得分:0)
我认为你固定了变量 - 这是我错过的一步。我一直如此勤奋,当它真的很重要时就错过了它。谢谢!!! 地图的目的是将这组寄存器与其他寄存器分开使用。这是一个具有多种寄存器的模拟器。地图包括寄存器文件中的那些,我需要能够显示它们。它们与地址一起映射。 我有3种类型的寄存器:AbstractRegister(所有寄存器都是超级寄存器),寄存器(所有没有微码的寄存器)和RegisterSpecialty(在获取/解码/执行周期中调用它们时,具有启用/禁用它们的信号的微码) 。我这样做是因为我注意到没有信号的寄存器被自动禁用了。
public class Register扩展AbstractRegister {
/** register number */
private int regNum;
/** 32 bit32 address in hex format */
private String word;
/** name of register */
private static String regName;
/ ** * *构造函数注册 * / public Register(){ regName = getRegName(); word = getWord(); }
/ ** * *构造函数 *注册 * @param num * / public Register(int num){ setRegNumber(NUM); }
/**
* increment
* @param string
* @param more2
* @return
*/
public String increment(String string) {
String s = string.trim();
s = string.replaceFirst("0x", "");
int src1 = Integer.parseInt(s);
Micro.DrALU.setFlag("1");
String s1 = "0x" + new ALU().input(src1, 1, 0b00);
return s1;
}
/**
* setRegNum
* @param regSel the regSel to set
*/
public void setRegNum(int regNum) {
this.regNum = regNum;
}
/**
*
* setRegName
*
* @param name
*/
public void setRegName(String name) {
regName = name;
}
/**
* @return the regName
*/
@Override
public String getRegName() {
return regName;
}
/**
* @return the word
*/
@Override
public String getWord() {
return word;
}
/**
* @param word
* the word to set
*/
@Override
public void setWord(String word) {
if(word != null){
this.word = word;
}else{
word = "0x00000000";
}
}
/**
*
*/
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append(getRegName());
sb.append(" ");
// sb.append(getRegNum());
// sb.append(" ");
// sb.append(getWord());
return sb.toString();
}
/**
* setRegNumber
* @param i
* @return
*/
public void setRegNumber(int i) {
regNum = i;
}
/**
* getRegNum
* @return the regNum
*/
public int getRegNum() {
return regNum;
}
/**
* valueOfNumber
* @param reg * @return
*/
public int valueOfNumber(Register reg) {
return this.regNum;
}
/**
* valueOf
* @param trim
* @return
*/
public String valueOf(String name) {
setRegName(name);
return name.toString();
}
}