阅读关于6502的文档,我无法在任何地方找到答案。使用相对寻址时可以进行换行。但是是否有可能围绕两端?我猜这是可能的,但不太可能。6502 Relative Address mode wrapping
而当我的意思是两端,我的意思是我知道你可以从高PC到低PC。但是,您是否也可以从一台低端个人电脑换到一台高端电脑?
阅读关于6502的文档,我无法在任何地方找到答案。使用相对寻址时可以进行换行。但是是否有可能围绕两端?我猜这是可能的,但不太可能。6502 Relative Address mode wrapping
而当我的意思是两端,我的意思是我知道你可以从高PC到低PC。但是,您是否也可以从一台低端个人电脑换到一台高端电脑?
将页面边界与相对分支交叉会产生额外的循环,但不管页面交叉分支是向前分支还是向后分支,都没有任何区别。
您可以在Visual6502试试。在地址0000处输入程序A9 00 F0 EC
(LDA #00
/BEQ $FFF0
),单步执行代码并查看BEQ
后的结束位置。如果你只相信真正的硬件,你可以很容易地验证任天堂娱乐系统。
很显然,如果能够通过相对分支到达页面FF,则必须在zeropage RAM之外执行,并且您可能不希望浪费ZP RAM上的代码,因为它需要适合最频繁访问数据。所以这会使这种特殊情况不太可能。
通常情况下,您可以使用模运算执行您自己的地址计算,然后将结果用于绝对寻址。
是的,它也可以倒退。但是许多汇编程序不支持这一点。当你尝试在zeropage寻址> $ ff80区域的开始处放置一个分支操作符时,汇编器通常会抛出错误,如“偏移过大”。但是,当您尝试放置操作码像> 0002 f0 e0
这样的字节值时,您会得到结果beq $ffe4
。我使用0002
作为第一个可用的内存地址,因为我使用Commodore 64来试用它,而$ 0001不适用于该机器。对于其他基于6502的机器,$ 0000也应该可以。
我相信这个问题是关于6502行为。欧普可能正在研究一些仿真的东西等等。我不认为这个答案对他有帮助。 – 2013-03-28 13:48:55