⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewr.java

📁 MIPS 仿真器
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class RegViewer extends JFrame
{
	TextArea regarea;
	public RegViewer(PC pc)
	{
		super("View Registers");
	    int width=400;                           
		int height=460;
		setSize(width,height);
		regarea=new TextArea("",60,80,TextArea.SCROLLBARS_NONE);
		add(regarea);
		try{
			regarea.setText(pc.ViewReg());
		}
		catch (Exception ee){}
	}
}
class MemViewer extends JFrame implements ActionListener
{
	TextArea memarea;
	JButton insm,datam,gpm,spm,random,pageup,pagedown;
	JTextField m_start;
	int startm;
	PC pc;
	int Linecount;

	public MemViewer(PC pc, int Linecount)
	{
		super("View Memory");
		this.pc=pc;
		this.Linecount=Linecount;
	    int width=600;                           
		int height=430;
		setSize(width,height);

		memarea=new TextArea("",15,65,TextArea.SCROLLBARS_NONE);
		startm=0;
		insm=new JButton("        View Instruction Memory        ");
		datam=new JButton("  View Data Memory After Instruction  ");
		gpm=new JButton("  View Global Static Data Memory ");
		spm=new JButton("   View Dynamic Stack Data Memory   ");
		random=new JButton("   View Memory with Random Access   ");
		pageup=new JButton("            Page Up            ");
		pagedown=new JButton("              Page Down           ");
		m_start=new JTextField(10);
		JPanel pane=new JPanel(); 
		insm.addActionListener(this);
		datam.addActionListener(this);
		gpm.addActionListener(this);
		spm.addActionListener(this);
		random.addActionListener(this);
		pageup.addActionListener(this);
		pagedown.addActionListener(this);
		pane.add(memarea);
		pane.add(insm);
		pane.add(datam);
		pane.add(gpm);
		pane.add(spm);
		pane.add(pageup);
		pane.add(pagedown);
		pane.add(random);		
		pane.add(m_start);
		add(pane);
		memarea.setText(null);
	}
	public void actionPerformed(ActionEvent e)
	{
		if (e.getSource()==insm)
		{
			memarea.setText(null);
			try{
				startm=0;
				memarea.append(pc.ViewMemory(startm));
			}
			catch (Exception ee){}
		}
		if (e.getSource()==datam)
		{
			memarea.setText(null);
			try{
				startm=Linecount*4+4;
				memarea.append(pc.ViewMemory(startm-startm%16));
			}
			catch(Exception ee){}
		}
		if (e.getSource()==gpm)
		{
			memarea.setText(null);
			try{
				startm=pc.register[28];			
				memarea.append(pc.ViewMemory(startm-startm%16));
			}
			catch(Exception ee){}
		}
		if (e.getSource()==spm)
		{
			memarea.setText(null);
			try{
				startm=pc.register[29]-252;
				memarea.append(pc.ViewMemory(startm));
			}
			catch(Exception ee){}
		}
		if (e.getSource()==random)
		{
			String s=m_start.getText();
//			int stm=Integer.parseInt(s);
			memarea.setText(null);
			try{
				startm=new NewHEX().HEXtoInt(s.trim().toLowerCase());			
				memarea.append(pc.ViewMemory(startm-startm%16));
			}
			catch(Exception ee){}
		}
		if (e.getSource()==pageup)
		{
			memarea.setText(null);
			try{
				startm=startm-256;
				memarea.append(pc.ViewMemory(startm));
			}
			catch(Exception ee){}
		}
		if (e.getSource()==pagedown)
		{
			memarea.setText(null);
			try{
				if (startm+256<pc.register[29]+4)
					startm=startm+256;
				memarea.append(pc.ViewMemory(startm));
			}
			catch(Exception ee){}
		}
	}
}
class HelpViewer extends JFrame
{
	TextArea helparea;
	public HelpViewer()
	{
		super("Help");
		int width=600;                           
		int height=550;
		setSize(width,height);
		helparea=new TextArea("",60,80,TextArea.SCROLLBARS_NONE);
		add(helparea);
		helparea.append("\n\nMIPS Assembler Simulator v0.6.24.1014 beta\n\n");
		helparea.append("\n\n使用说明:\n\n");
		helparea.append("1、本MIPS模拟器支持的指令如下:\nadd,addi,sub,subi,and,andi,or,ori,nor,beq,bne,j,jr,jal,lw,lh,lb,sw,sh,sb,");
		helparea.append("其中所有的跳转指令第三个操作数只能为一个行标签(不支持相对地址以及绝对地址),标签可以写在一行开头,以冒号结尾。\n");
		helparea.append("2、输入或修改MIPS指令或者二进制指令后请先保存后再进行汇编、反汇编或运行。保存后界面会显示行号,但实际写入文件并无行号,仅为方便用户查看运行结果和断点运行设置。\n");
		helparea.append("3、MIPS和二进制程序格式为一行一条指令,先输指令,直到END 000004(FC000001)结束,后面则是数据内存写入,使用DW在以PC为内存地址的区域写入数据,二进制代码则直接以数据作为改行代码。\n");
		helparea.append("4、程序设置了标准的32个数据寄存器和000000-ffffff的内存,内存地址空间仅为24位而不是32位是受到了数组空间的限制,其中默认000000-7fffff是指令内存,接下来区域为数据内存,静态全局数据内存始于800000向上存储,动态栈数据内存始于fffffc向下存储。当然可以在指令后的任何空间存储数据,并且是运行小型MIPS程序的较好方法,可以直接用指令导入指令内存后面的数据内存。\n");
		helparea.append("5、程序设置了断点运行功能:先按断点模式运行,再输入断点行号,按Go即可执行到断点,于是可以再设置下一个断点继续查看,直到程序执行到最后一行(此时若仍未找到断点则停止。在任何断点时刻,均可查看数据寄存器和内存的情况。\n");
		helparea.append("6、请尽量规范输入指令,否则可能会有Unexpected Error,注意程序要以END(FC000001)指令结尾,否则无法正常执行。在文本框内编辑时无须输入行号,而是保存后在文本框内自动显示,方便用户下面调试运行时查看而设置的。行号并非指令的一部分。\n");
		helparea.append("7、调用计算器和记事本的功能仅在Windows下可用,如果不习惯我们的界面可以用记事本编辑后Load再执行,计算器可以进行一些进制转换等操作验证结果。\n\n");
		helparea.append("v0.6.1x版更新:1、增加了lb,sb,lh,sh,lui等指令。2、修正了不进行汇编直接运行指令内存全为0的错误。3、完善了反汇编功能,更好地支持跳转指令。4、加入了帮助说明和调用记事本、计算器功能。5、对于判断是否需要保存的机制稍做了修改,虽然还是不太理想(有点不符合用户使用习惯)。6、对程序进行了打包生成jar文件,方便发行、移动复制和使用。7、去掉了所有的调试信息System.out.println.8、修正了只按运行不编译内存显示不正确的问题和设置断点第0行不能正常运行的问题。\n\n");
		helparea.append("v0.6.2x版更新:修正了关闭jar程序后仍然驻留javaw.exe进程,占用资源的问题,现在可以正常关闭软件了。\n\n");
		helparea.append("本程序由ZJU SC 0601 黄天乐、骆歆远、马超、蔡平一起完成,功能不多,平时学习时执行下小MIPS程序还是有一定可用性。由于时间匆忙,难免存在不少BUG,还请大家多多原谅和指出。\n\n");
		helparea.append("Mailto: wisp@zju.edu.cn\n\n");
		helparea.append("2008-06-11\n");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -