具有带符号字节的6502的分支条件指令?

时间:2013-06-01 17:36:56

标签: java binary emulation twos-complement 6502

我正在制作一个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个bith(从0开始)为0,则只有39:

0 0 1 0 0 1 1 1 ;39 dec

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

1 0 1 0 0 1 1 1 

实际上是-89?

我问这个是因为我用Java编程模拟器,字节用二进制补码解释,我在很多指令中都看到了这种情况,现在我感到困惑

1 个答案:

答案 0 :(得分:2)

哇,在这个上设置回路机器!我曾经在70年代和80年代的Atari VCS,计算机家族和投币街机游戏中为'02家族组装。好吧,因为我记得所有BEQ(相等分支)指令都检查“零标志”的状态,如果设置则检查分支。根据比较和数学函数设置/清除零标志。

由于你在询问'02上的+/-数字,你可能想要BPL(分支加号)或BMI(分支如果减去),它们基于符号'N'标志,基本上只是第7位累加器。因此递减0会得到$ ff并设置减去'N'标志。你会将这个$ ff解释为-1,意思是2的补码。

更新: 是的,在我的回答中我可能有点圆了..所以,是的,它是2的补码,并且偏移量是将要获取的下一个操作码的地址,意味着-2或$ fe会让你回来到你的'BEQ'。所以$ F0 $ A7实际上会从BEQ地址前2个字节的地址向后转89字节