新闻  |   论坛  |   博客  |   在线研讨会
重新定位堆栈和直接页面:
zhchxgh | 2009-07-10 16:48:45    阅读:1177   发布文章

重新定位堆栈和直接页面:
通电后,堆栈被放到页面1,直接页面(零页面)被放到页面0。在模拟模式(E=1)下,堆栈被初试化到页面1,零页面被初试化到页面0,以模拟6502的默认状态。 

重新定位直接页面(以前称为零页面)是通过使用PLD:直接页面出栈指令来实现的。

LDA #$5900 ;累加器直接读入16位数据 
PHA ;累加器入16位栈。 
PLD ;把数据出栈到直接页面寄存器。 
要时刻记住PLD从栈里面取出了16位(2字节)。你也可以使用TCD:传送C寄存器的数值到直接页面寄存器。(C寄存器是16位的累加器)

LDA #$5900 ;累加器直接读入16位数据 
TCD ;传送累加器的数值到直接页面寄存器。 
尽管通常你都会想让直接页面在一个页面的边界处(低端字节为零)开始,你仍然能指定地址的低端字节为1-255之间的任何值。然而,如果直接页面寄存器的低端字节不是零的话,所有的直接页面(零页面)寻址方式都将会增加一个执行时钟周期。 

在模拟模式下,直接页面寻址方式会将超出直接页面的寻址变址折回到直接页面的开始处继续寻址,就像6502那样。举例来说:

LDX #$2C 
LDA ($E0,X) 
该例子会产生一个有效的地址$0C而不是$10C。 

在原本模式下,直接页面寻址方式会在寻址变址超过直接页面时进入下一个内存页面。使用上面的例子会产生预期的$10C有效地址。 

对于那些资深的Commodore 128程序员来说,重新定位直接页面的观念完全不是新的--“我们已在MMU上和它打交道达数年之久”。然而,在有良好的编程风格的支持下,重新定位零页面到除了页面边界之外的地方具有很大的意义。 

重新定位直接页面的优点,与6502的零页面寻址是一样的。你能通过使用直接页面(零页面)寻址来保存数据同时获得更快的执行速度。找到最佳的方法来为重新定位的直接页面编程是需要花一些时间的,但一旦你掌握了它,你就会很习惯的使用它。 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客