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

📄 cpu.java

📁 这是一份标准的课程设计文档
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			else if (reg1.equals("CX")||reg1.equals("cx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.ADD(CX,AX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.ADD(CX,BX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.ADD(CX,DX);
				else throw new myException("加法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("DX")||reg1.equals("dx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.ADD(DX,AX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.ADD(DX,CX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.ADD(DX,BX);
				else throw new myException("加法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else throw new myException("加法运算中找不到第一个寄存器,应该是拼写错误");
//		}
//		catch(myException e){throw new myException(""+e);}
	}
	/*************************************************************
	*功能描述:	减法运算(long型和double型)reg1-reg2->reg1
	*参数说明:	reg1:源操作数1/目的操作数 reg2:源操作数2
	**************************************************************/
	public	void SUB(String reg1,String reg2)
		throws myException
	{
//		try{
			if(reg1.equals("AX")||reg1.equals("ax"))
			{
				if(reg2.equals("BX")||reg2.equals("bx"))
					alu.SUB(AX,BX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.SUB(AX,CX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.SUB(AX,DX);
				else throw new myException("减法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("BX")||reg1.equals("bx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.SUB(BX,AX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.SUB(BX,CX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.SUB(BX,DX);
				else throw new myException("减法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("CX")||reg1.equals("cx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.SUB(CX,AX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.SUB(CX,BX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.SUB(CX,DX);
				else throw new myException("减法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("DX")||reg1.equals("dx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.SUB(DX,AX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.SUB(DX,CX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.SUB(DX,BX);
				else throw new myException("减法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else throw new myException("减法运算中找不到第一个寄存器,应该是拼写错误");
//		}
//		catch(myException e){throw new myException(""+e);}
	}
	/*************************************************************
	*功能描述:	乘法运算(long型和double型)reg1*reg2->reg1
	*参数说明:	reg1:源操作数1/目的操作数 reg2:源操作数2
	**************************************************************/
	public	void MUL(String reg1,String reg2)
		throws myException
	{
//		try{
			if(reg1.equals("AX")||reg1.equals("ax"))
			{
				if(reg2.equals("BX")||reg2.equals("bx"))
					alu.MUL(AX,BX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.MUL(AX,CX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.MUL(AX,DX);
				else throw new myException("乘法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("BX")||reg1.equals("bx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.MUL(BX,AX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.MUL(BX,CX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.MUL(BX,DX);
				else throw new myException("乘法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("CX")||reg1.equals("cx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.MUL(CX,AX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.MUL(CX,BX);
				else if(reg2.equals("DX")||reg2.equals("dx"))
					alu.MUL(CX,DX);
				else throw new myException("乘法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else if (reg1.equals("DX")||reg1.equals("dx"))
			{
				if(reg2.equals("AX")||reg2.equals("ax"))
					alu.MUL(DX,AX);
				else if(reg2.equals("CX")||reg2.equals("cx"))
					alu.MUL(DX,CX);
				else if(reg2.equals("BX")||reg2.equals("bx"))
					alu.MUL(DX,BX);
				else throw new myException("乘法运算中找不到第二个寄存器,应该是拼写错误");
			}
			else throw new myException("乘法运算中找不到第一个寄存器,应该是拼写错误");
//		}
//		catch(myException e){throw new myException(""+e);}
	}
	/******************************************************
	*功能描述:除法运算AX/BX->CX		AX%BX->DX
	******************************************************/
	public void DIV()
		throws myException
	{
		try
		{
			alu.DIV(AX,BX,CX,DX);
		}
		catch(myException e){throw new myException(""+e);}
	}
	/*****************************************************
	*功能描述:	负值指令
	*参数说明:	reg1:操作的寄存器	reg2:存入寄存器的值
	*异常说明:	myException
	*****************************************************/
	public void MOV(String reg1,String reg2)
		throws myException
	{
		try
		{
			int pp	=	reg2.indexOf(".");
			if(pp==-1)
				{
					int value	=	Integer.parseInt(reg2);
					if(reg1.equals("AX")||reg1.equals("ax"))
						AX.setValue(value);
					else if(reg1.equals("BX")||reg1.equals("bx"))
						BX.setValue(value);
					else if(reg1.equals("CX")||reg1.equals("cx"))
						CX.setValue(value);
					else if(reg1.equals("DX")||reg1.equals("dx"))
						DX.setValue(value);
					else throw new myException("MOV指令中找不到寄存器请确认输入是否有错误!");
				}
			else 
				{
					double value1	=	Double.parseDouble(reg2);
					if(reg1.equals("AX")||reg1.equals("ax"))
						AX.setValue(value1);
					else if(reg1.equals("BX")||reg1.equals("bx"))
						BX.setValue(value1);
					else if(reg1.equals("CX")||reg1.equals("cx"))
						CX.setValue(value1);
					else if(reg1.equals("DX")||reg1.equals("dx"))
						DX.setValue(value1);
					else throw new myException("MOV指令中找不到寄存器请确认输入是否有错误!");
				}
		}
		catch(NumberFormatException e){throw new myException("你在MOV指令中输入的数格式不对请确认你输入的数是不是INT或FLOAT型的数");}
	}
	/*********************************************
	*功能描述:	获取PC的页地址
	*********************************************/
	public int getPCFirst()
	{
		return	PC.getFirst();	
	}
	/*********************************************
	*功能描述:	获取PC的页内地址
	*********************************************/
	public int getPCLast()
	{
		return	PC.getLast();	
	}
	/*************************************************
	*功能描述:	指令分析
	*参数说明:	instruc:指令	reg1:操作数一		reg2:操作数二
	*异常说明:	myException
	**************************************************/
	public void Calculate(String instruc,String reg1,String reg2 )
		throws myException
	{
			if(instruc.equals("ADD")||instruc.equals("add"))
			{
				try
				{
					this.ADD(reg1,reg2);	//加法运算
				}
				catch(myException e){throw new myException(""+e);}
			}	
			else if(instruc.equals("SUB")||instruc.equals("sub"))
			{
				try
				{
					this.SUB(reg1,reg2);	//减法运算
				}
				catch(myException e){throw new myException(""+e);}
			}
			else if(instruc.equals("MUL")||instruc.equals("mul"))
			{
				try
				{
					this.MUL(reg1,reg2);//乘法运算	
				}
				catch(myException e){throw new myException(""+e);}
			}
			else if(instruc.equals("DIV")||instruc.equals("div"))
			{
				try
				{
					this.DIV();//除法运算
				}
				catch(myException e){throw new myException(""+e);}	
			}
			else if(instruc.equals("MOV")||instruc.equals("mov"))
			{
				try
				{
					this.MOV(reg1,reg2);//负值运算
				}
				catch(myException e){throw new myException(""+e);}		
			}
			else throw new myException("输入的指令不正确!");
	}
	/*public void OUT(String value1)
	{
		String buf;
		try
		{
			if(value1.trim().equals("ax")||value1.trim().equals("AX"))
			{
				buf=getString("ax");
				if(panduan(buf)==1)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getInt("AX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("AX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("AX")+"\n");
			}
			else if(value1.trim().equals("bx")||value1.trim().equals("BX"))
			{
				buf=getString("bx");
				if(panduan(buf)==1)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getInt("BX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("BX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("BX")+"\n");
			}
			else if(value1.trim().equals("cx")||value1.trim().equals("CX"))
			{
				buf=getString("cx");
				if(panduan(buf)==1)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getInt("CX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("CX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("CX")+"\n");
			}
			else if(value1.trim().equals("dx")||value1.trim().equals("DX"))
			{
				buf=getString("dx");
				if(panduan(buf)==1)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getInt("DX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("DX")+"\n");
				else if(panduan(buf)==2)
					desktop.Desktop.addTextToScreenTextField("作业输出:"+getDouble("DX")+"\n");
			}
			else
			{
				desktop.Desktop.addTextToScreenTextField("作业输出:"+value1+"\n");
			}
		}
		catch(NoSuchRegistException e){desktop.Desktop.addTextToStateTextField(""+e+"\n");}
	}
	public int panduan(String value2)
	{
		int flat	=	0;
		int pp	=	value2.indexOf(".");
		int int_value;
		double double_value;
		String s_value;
		try
		{
			if(pp==-1)
			{
				int_value=Integer.parseInt(value2);
				flat=1;
			}
			else 
			{
				double_value=Double.parseDouble(value2);
				flat=2;
			}
		}
		catch(NumberFormatException ex)
		{
			s_value=value2;
			flat=3;
		}
		return flat;
	}*/

};

⌨️ 快捷键说明

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