📄 alu.java
字号:
/****************************************************
*功能描述:模拟逻辑运算器
*2004-9-11 编写者:赖卫国
****************************************************/
package cpu;
import myException.*;
class ALU
{
private static boolean alu = false;
public ALU()
throws OnlyOneALUException
{
if(!alu)
alu = true;
else
throw new OnlyOneALUException();
}
/*******************************************************
*功能描述: 加法运算(long型和double型)reg1+reg2->reg1
*参数说明: reg1:源操作数/目的操作数 reg2:源操作数
*返回值: void
********************************************************/
public void ADD(register_data reg1,register_data reg2)
throws myException
{
String reg1_s,reg2_s;
int point1,point2;
int reg1_l,reg2_l,result_l;
double reg1_d,reg2_d,result_d;
reg1_s = reg1.getValue().toString();
reg2_s = reg2.getValue().toString();
point1 = reg1_s.indexOf(".");
point2 = reg2_s.indexOf(".");
if(point1==-1&&point2==-1)
{
reg1_l = reg1.get_int();
reg2_l = reg2.get_int();
result_l = reg1_l+reg2_l;
reg1.setValue(result_l);
}
else if (point1!=-1&&point2!=-1)
{
reg1_d = reg1.get_double();
reg2_d = reg2.get_double();
result_d = reg1_d+reg2_d;
reg1.setValue(result_d);
}
else throw new myException("两个寄存器的类型不对,不能相加.");
}
/*******************************************************
*功能描述: 减法运算(long型和double型)reg1-reg2->reg1
*参数说明: reg1:源操作数/目的操作数 reg2:源操作数
*返回值: void
********************************************************/
public void SUB(register_data reg1,register_data reg2)
throws myException
{
String reg1_s,reg2_s;
int point1,point2;
int reg1_l,reg2_l,result_l;
double reg1_d,reg2_d,result_d;
reg1_s = reg1.getValue().toString();
reg2_s = reg2.getValue().toString();
point1 = reg1_s.indexOf(".");
point2 = reg2_s.indexOf(".");
if(point1==-1&&point2==-1)
{
reg1_l = reg1.get_int();
reg2_l = reg2.get_int();
result_l = reg1_l-reg2_l;
reg1.setValue(result_l);
}
else if (point1!=-1&&point2!=-1)
{
reg1_d = reg1.get_double();
reg2_d = reg2.get_double();
result_d = reg1_d-reg2_d;
reg1.setValue(result_d);
}
else throw new myException("两个寄存器的类型不对,不能相减.");
}
/*******************************************************
*功能描述: 乘法运算(long型和double型)reg1*reg2->reg1
*参数说明: reg1:源操作数/目的操作数 reg2:源操作数
*返回值: void
********************************************************/
public void MUL(register_data reg1,register_data reg2)
throws myException
{
String reg1_s,reg2_s;
int point1,point2;
int reg1_l,reg2_l,result_l;
double reg1_d,reg2_d,result_d;
reg1_s = reg1.getValue().toString();
reg2_s = reg2.getValue().toString();
point1 = reg1_s.indexOf(".");
point2 = reg2_s.indexOf(".");
if(point1==-1&&point2==-1)
{
reg1_l = reg1.get_int();
reg2_l = reg2.get_int();
result_l = reg1_l*reg2_l;
reg1.setValue(result_l);
}
else if (point1!=-1&&point2!=-1)
{
reg1_d = reg1.get_double();
reg2_d = reg2.get_double();
result_d = reg1_d*reg2_d;
reg1.setValue(result_d);
}
else throw new myException("两个寄存器的类型不对,不能相减.");
}
/*******************************************************
*功能描述: 除法运算(long型和double型)reg1/reg2->reg3 reg1%reg2->reg4
*参数说明: reg1:源操作数 reg2:源操作数 reg3:目的操作数1 reg4:目的操作数2
*返回值: void
********************************************************/
public void DIV(register_data reg1,register_data reg2,register_data reg3,register_data reg4)
throws myException
{
String reg1_s,reg2_s;
int point1,point2;
int reg1_l,reg2_l,result_l,result1_l;
double reg1_d,reg2_d,result_d,result1_d;
reg1_s = reg1.getValue().toString();
reg2_s = reg2.getValue().toString();
point1 = reg1_s.indexOf(".");
point2 = reg2_s.indexOf(".");
if(point1==-1&&point2==-1)
{
reg1_l = reg1.get_int();
reg2_l = reg2.get_int();
result_l = reg1_l/reg2_l;
result1_l = reg1_l%reg2_l;
reg3.setValue(result_l);
reg4.setValue(result_l);
}
else if (point1!=-1&&point2!=-1)
{
reg1_d = reg1.get_double();
reg2_d = reg2.get_double();
result_d = reg1_d/reg2_d;
result1_d = reg1_d%reg2_d;
reg3.setValue(result_d);
reg4.setValue(result1_d);
}
else throw new myException("两个寄存器的类型不对,不能相除.");
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -