我目前正在尝试用Java编写处理器模拟器;包括通常在CPU中找到的所有不同结构,包括ALU。
我在解决在处理减法时如何能够代表Java中2的补码溢出时遇到一些困难。添加很简单,如果结果高于255
然后溢出,我在下面编写代码来表示添加过程:
public void addition()
{
byte a = aluA.getValue();
byte b = aluB.getValue();
if((a + b) > 255)
{
carryFlag = true;
}
byte r = (byte) (a + b);
aluR.setWrite();
aluR.loadValue(r);
System.out.println("[ALU] Addition operation completed successfully");
}
但我不确定在处理减法时我应该如何表示溢出。据我所知,减法溢出在两种情况下发生:
但是我如何在Java中表示这一点,并且Java表示32位符号整数的方式会影响这个吗?
我下面的代码成功地减去了ALU寄存器中的两个字节,但是我需要一种检测溢出何时发生的方法。
public void subtraction()
{
byte a = aluA.getValue();
byte b = aluB.getValue();
if((a-b) == 0)
{
zeroFlag = true;
}
if((a-b) < 0)
{
negativeFlag = true;
}
byte r = (byte) (a - b);
aluR.setWrite();
aluR.loadValue(r);
System.out.println("[ALU] Subtraction operation completed successfully");
}