gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:55:02 26 4
gpt4 key购买 nike

我正在制作一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com