java - 带符号字节的 6502 的条件分支指令?

标签 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 位(从 0 开始)是 0,那么它就是 39:

0 0 1 0 0 1 1 1 ;39 dec

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

1 0 1 0 0 1 1 1 

实际上是-89?

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

最佳答案

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

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

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

关于java - 带符号字节的 6502 的条件分支指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875378/

相关文章:

java - 我的 IDE 找不到我导入的库。错误: "package does not exist"

java - 如何要求.class参数是Java中的某个类?

C++ 二进制搜索无法正常工作 - 查找不在数组中的元素

android - Android Studio on window 中缺少 SDK 模拟器目录

ios - 物理 IOS/Android 设备上的 Firebase Firestore 模拟器

java - 在 java 中使用 continue 选项连接 while 循环

java - JPanel java 未显示

c - 如何获得一个数的有符号补码?

search - 二分搜索是 O(log n) 还是 O(n log n)?

如果在处理时单击,Android 模拟器会崩溃