📄 cpu.java
字号:
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 + -