如何用Java中的减法表示2的补码溢出?

时间:2018-01-22 18:25:12

标签: java subtraction alu

我目前正在尝试用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");
    }

但我不确定在处理减法时我应该如何表示溢出。据我所知,减法溢出在两种情况下发生:

  • (+ A) - (-B)= -C
  • ( - A) - (+ B)= + C

但是我如何在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");
    }

0 个答案:

没有答案