阅读 6502 上的文档,我无法在任何地方找到答案。使用相对寻址时可以换行。但是有可能环绕两端吗?我猜这是可能的,但不太可能。
当我的意思是两端时,我的意思是我知道你可以从高 PC 换到低 PC。但是您也可以从低 PC 包装到高 PC 吗?
用相对分支跨越页面边界会产生一个额外的循环,但是页面跨越分支是向前分支还是向后分支都没有任何区别。
您可以在Visual6502中尝试一下。在地址 0000 处输入程序A9 00 F0 EC
( LDA #00
/ BEQ $FFF0
),单步执行代码并查看BEQ
. 如果您只信任真正的硬件,您可以轻松地在任天堂娱乐系统之类的设备上验证这一点。
显然,为了能够使用相对分支到达页面 FF,您必须在零页 RAM 之外执行,并且您可能不想在代码上浪费 ZP RAM,因为它需要适合您最常访问的数据。因此,这将使这种特殊情况不太可能发生。
是的,它也可以向后工作。但是许多汇编程序不支持这一点。当您尝试将分支运算符放在零页寻址 >$ff80 区域的开头时,汇编程序通常会抛出诸如“偏移量太大”之类的错误。但是,当您尝试使用字节值放置操作码时,> 0002 f0 e0
您会得到结果beq $ffe4
。我使用0002
了第一个可用的内存地址,因为我使用了 Commodore 64 来尝试它,并且 $0001 不适用于该机器。对于其他基于 6502 的机器,0000 美元也应该没问题。
一般来说,您可以使用模运算执行自己的地址计算,然后将结果用于绝对寻址。