新闻  |   论坛  |   博客  |   在线研讨会
65816介绍
zhchxgh | 2009-07-10 16:56:29    阅读:2727   发布文章

65816介绍

欢迎来到65816的编程世界。65816是经典的6502中央处理器的一种升级产品。 它主要的新特征包括可对高达16MB内存进行直接访问的完全24位寻址;提供了可完全模拟6502的模拟模式,新的寻址方式,完全的16位用户寄存器和几十个新的指令。

如果你是一个资深的6502程序员,你将会很快地了解65816的优点。无论处理器的操作速度如何,藉着16位用户寄存器的优势,65816总是操作得要快一些。 由于在操作(比如加、减)中使用了16位寄存器,65816为程序员提供了速度的实质性提高。

接下来的文档不打算写成一个65816的编程指南,但是可以作为那些熟悉6502并且希望找到新的65816资料的人的一本入门书。

65816提供两种主要的操作模式,原本的65816模式和6502模拟模式。处理器的通电后默认状态是在6502模拟模式。除了修正了6502中的一些BUG,模拟模式下的65816无论在哪方面看都像是一个6502。

在65816的模拟模式和最初的6502有一些值得注意的不同之处。一些6502没有使用的操作码,现在已经作为65816的附加操作而可以被使用了,如此它们将不会得到和在旧的6502处理器上获得的相同结果。无论是在模拟模式还是在原本模式下,65816都使用了所有可能采用的256个操作码。

6502和模拟模式之间还有一个差异就是那间接的跳转指令JMP($XXXX)的BUG,当低位$XX被固定的时候它会使处理器取回错误的数据。

在模拟模式下,65816的直接零页面寄存器设置为零。堆栈指针的高位设置为一(和6502一样)。程序和数据存储寄存器的初值设置为零。所有指令的占用时间是一样的。

在原本模式下,通过24位的寻址,处理器有完全访问16MB地址空间的能力。 原本模式也使得一些新的和扩展的寄存器变为可用。65816有能力将堆栈和零页面重新定位到开始的64K内存空间内的任何位置。对于Commodore 128的程序员,这听起来会让人怀疑它也像128的内存管理单元那样重新定位零页和堆栈--因此它从一开始就是落伍的。(说句题外话,在CMD的超级处理器128上编程是很有趣的--它会给你一个可重新定位的零页面和堆栈。呵呵;))

原本模式也打开了16位用户寄存器的世界。累加器可能是8位或16位的。XY变址寄存器也可能是8位或16位的。累加器也许可以看成两个8位的寄存器(一个可到达而另一个是隐藏的),或者看成一个完整的16位寄存器。当累加器被设置成16位,内存也被用16位(2字节)的方式处理。

另外两个新的寄存器是数据存储寄存器和程序存储寄存器。程序存储寄存器在功能上扩展了程序记数器,使它可以超过24位,而数据存储寄存器则允许代码流程的转移到或者跳转到6502的64K寻址空间之外的地址。

最后,在原本模式下,65816的状态寄存器包括了一些新的位。由于65816有BRK硬件向量,旧的BRK位已经不再需要。BRK位现在被用于选择8位或者16位变址寄存器的X位所取代,然而在模拟模式中,BRK位仍然存在。过去状态寄存器中保留的位5则被16/8位的累加器/内存选择位所取代。还有一个隐藏的模拟位,只有在将它和进位标志交换之后才可以被访问到。

下面是一些新的有趣的东西: 

XYA寄存器可能是16或8位的。 
哇,两个真正的内存区块移动指令。 
新的压栈/出栈指令phx,plx,phy,ply。 
新的xfer指令tyx,txy。 
不载入累加器而设置或者重置任何的内存位。 
INC(递增)和DEC(递减)累加器。 
间接的JSR,Branch Always,或者Branch Long到64K。 
零页面被重新命名为直接页面。像许多奇怪的事物一样,这将会开始引起真正的困惑。你能做的唯一事情是,"忘掉它然后继续用它"。 

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

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