我正在制作一个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编程模拟器,字节用二进制补码解释,我在很多指令中都看到了这种情况,现在我感到困惑
答案 0 :(得分:2)
由于你在询问'02上的+/-数字,你可能想要BPL(分支加号)或BMI(分支如果减去),它们基于符号'N'标志,基本上只是第7位累加器。因此递减0会得到$ ff并设置减去'N'标志。你会将这个$ ff解释为-1,意思是2的补码。
更新: 是的,在我的回答中我可能有点圆了..所以,是的,它是2的补码,并且偏移量是将要获取的下一个操作码的地址,意味着-2或$ fe会让你回来到你的'BEQ'。所以$ F0 $ A7实际上会从BEQ地址前2个字节的地址向后转89字节