【发布时间】:2013-06-01 17:36:55
【问题描述】:
我正在制作一个 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 编写模拟器,字节被解释为二进制补码,我在很多指令中都看到过这种情况,现在我感到困惑.
【问题讨论】:
-
这里有一些讨论:forums.nesdev.com/viewtopic.php?t=102。结论似乎是错误的;它应该是 2 的补码。
-
我对处理器了解不多,但我之前读到过,CPU 可以通过使用二进制补码轻松跟踪二进制数,这就是我问这个问题的原因。有一秒钟我正要删除它,认为该文档是由非常有经验的人制作的,即不太可能是不正确的,但幸运的是我没有删除它,否则我的整个 CPU 将一文不值。谢谢。具有讽刺意味的是,我还注意到重复的 0x60 操作码错误,这就是为什么我(幸运地)使用多个资源作为参考。似乎即使是最好的也很容易出错。
-
伟大的项目承接。祝你好运。 :)
标签: java binary emulation twos-complement 6502