?? 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 + -