注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

[转]NES汇编开发(2) - NES的CPU(6502)中的寄存器  

2009-10-18 23:18:48|  分类: FC网友经验 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

引用http://www.sonic.org.cn/GensBlog/article.asp?id=28

作者 sonic3d

原文节选并修改自http://bbs.ggv.com.cn/wqxbbs/read.php?tid=80271

6502中共有3个8位寄存器一个8位状态寄存器1个栈寄存器和1个16位寄存器

1.累加寄存器A

这是8位的寄存器,也是6502中最重要和最常用的寄存器,可用于读写数据,进行各种逻辑运算等等。

2.变址寄存器X

这个8位寄存器和A差不多,只是它可以非常方便地加1或减1,常用于数据传送,运算等等

3.变址寄存器Y

和X寄存器一样,方便搭配使用(比如用作表示背景卷轴的X,Y坐标)

4.状态寄存器[也叫程序状态字PSW(Program Status Word)]

这也是8位寄存器,用于寄存指令执行的状态信息,PSW的各位状态有的是根据指令执行的结果由硬件自动设置的,有的可以由用户用指令设定。

PSW的各位意义如下(其中第5位E为扩展位,供基于6502扩展的处理器使用,保持为0,但不确定)

7 6 5 4 3 2 1 0

N V E B D I Z C

N:负数标志,指令指行完后为负(>7F)则为1,否则为0

V:溢出标志,若产生溢出则V=1,否则V=0

B:Break指令,用于判别中断是由BRK指令引起还是实际的中断引起

D:十进制模式标志,为1表示十进制模式,为0表示16进制模式。

(一旦进入十进制模式ADC和SBC两条指令会把操作数当作10进制数,不推荐使用)

I:中断禁用标志,是否允许系统中断IRQ,=1:禁止,=0:允许

Z:零标志,结果是否为0,为0则Z=1,否则Z=0

C:进位标志,结果最高位有进位则C=1,否则C=0

4.堆栈指针寄存器SP

这是8位的寄存器,指向栈顶位置

在程序运行时。须要一称之为堆栈的RAM块作为数据缓冲区,以暂存程序运行过程中的一些重要数据

堆栈由连续的RAM单元组成。数据写入堆栈称入栈,数据从堆栈中读出称为出栈,堆栈的操作遵循"先进后出"的操作,即先入栈的数据后出栈。

系统如何了解当前的堆栈顶在哪以从顶部弹出堆栈呢?就要依靠堆栈指针SP。

6502CPU规范中,堆栈位于第1个页面($0100-$01ff)的RAM中,因此SP指向的时堆栈顶的低8位,即堆栈顶地址为$00SP。

当进行入栈、出栈操作时,栈顶单元发生变化,SP的内容也将加1或减1

5.程序计数器PC(Program Counter)

这是6502唯一的一个16为计数器,其内容为将要执行命令的存放地址,寻址范围达64KB($0000-$FFFF),CPU是根据PC的内容找到指令的存储单元,取出指令执行的。PC具有自动加1的功能,CPU每读取一条指令的1字节,PC内容自动加1,指向下一个存储单元,这样就能实现程序的顺序执行。

用户不能对PC进行读写,但可以通过跳转,调用,返回等指令改变其内容,以改变程序的执行顺序

  评论这张
 
阅读(766)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017