2

我正在制作一个 6502 模拟器(之后我将模拟它周围的其他 NES 组件以拥有一个功能齐全的 NES 模拟器)并且我遇到了条件分支指令(相对)。现在,我想知道的是,该字节被认为是保存为二进制补码还是常规的负字节?这就是我的意思:

在 6502 个文档之一(当然是非官方的)中给出了这个例子:

BEQ $A7 ;Branch-on-equal with value 0xA7
$F0 $A7 ;Translation into hex

在文档中,它说0xA7应该被视为-39,并表示如下:

1 0 1 0 0 1 1 1 ;-39 dec

如果第 7 位(从 0 开始)为 0,则为 39:

0 0 1 0 0 1 1 1 ;39 dec

我想知道,这个文件是否正确,或者我应该使用二进制补码,这意味着:

1 0 1 0 0 1 1 1 

实际上是-89?

我问这个是因为我正在用 Java 编写模拟器,并且字节被解释为二进制补码,而且我在很多指令中都看到了这种方式,现在我感到困惑。

4

1 回答 1

3

哇,在这台机器上设置回程机器!早在 70 年代和 80 年代,我就曾在 '02 家族的 Atari VCS、计算机家族和投币街机游戏中进行汇编编程。好的,我记得所有 BEQ(相等分支)指令所做的就是检查“零标志”的状态,如果设置了则分支。零标志根据比较和数学函数设置/清除。

由于您要询问 '02 上的 +/- 数字,因此您可能需要基于符号 'N' 标志的 BPL(如果为正则为分支)或 BMI(如果为负则为分支),该标志基本上只是累加器的第 7 位。所以递减 0 会让你得到 $ff 并设置减号'N'标志。您可以将此 $ff 解释为 -1,表示 2 的补码。

更新:是的,我的回答可能有点绕圈子。所以,是的,它是 2 的补码,偏移量是将要获取的下一个操作码的地址,这意味着 -2 或 $fe 会得到你回到你的'BEQ'。所以 $F0 $A7 实际上会从 BEQ 地址前 2 个字节的地址向后分支 89 个字节

于 2013-06-01T17:56:59.853 回答