【发布时间】:2013-03-28 04:57:26
【问题描述】:
阅读 6502 上的文档,我无法在任何地方找到答案。使用相对寻址时可以换行。但是有可能环绕两端吗?我猜这是可能的,但不太可能。
当我的意思是两端,我的意思是我知道你可以从高 PC 换到低 PC。但是你也可以从低端PC换成高端PC吗?
【问题讨论】:
阅读 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 美元也应该没问题。
【讨论】:
一般来说,您可以使用模运算执行自己的地址计算,然后将结果用于绝对寻址。
【讨论】: