6502基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6502基础知识:
6502CPU是8位的处理器,早期的nes( 任天堂娱乐系统 )即是采用了此种cpu, 特点是功耗小,成本低,稳定性强,缺点嘛,自然是很明显, 速度慢,能处理的任务类型少,而且,
相对于 NES,WQX还少了象处理图象和声音的专用芯片(NC2k后的系统增加了高速处理
芯片 DSP 来作为声音处理,因此使在其上播放WAV成为可能)。
以后,我们使用汇编语言,就都要和这个6502芯片打交道了,让我们熟悉一下它。
和 PC 上的 8080CPU一样,6502cpu也有一套指令集,cpu识别指令,进行相应的
操作。
这些指令都是16进制的,比如:a9h 01h 85h 80h 60h,在16进制数据后面加上一个
"h"(hex), 来将它们和其它进制区分开来,以后的内容里, 16进制后将不加h, 其它进制 (10
进制后加 "D"(dec),2进制后加 "B"(bin))则将特别说明。
上面的那段数据 :a901 85 80 60,就是一段机器码,也是一段汇编程序, 汇编的写法如
下:
lda#$01
sta$80
rts
这段命令的用途将在以后介绍, 这里只是让大家了解一下汇编及机器码程序的书写格式。
这些数据以二进制的格式被存储在wqx的存储介质里( 一般为 ram,flash,rom),由cpu控制不断从存储介质中读取并分析执行。
数和运算相关知识
这节讲解进制、逻辑运算知识,若已经知道,可跳去下一节
(1)进制 :
a.常见的计数制 :
10 进制 , 这是大家熟悉的,由0-9这10个数码组成,逢10进位,表示时在数码后加
D(Decimal), 由于很常用,常省略"D"
b.二进制数 :
只有 0,1两个数码,逢 2 进位,用 B(Binary)结尾,如11110000B
c.十六进制数
有0-9 和 A,B,C,D,E,F共16个数码,其中A,B,C,D,E,F分别对应10进制的
10,11,12,13,14,15,后用H(hexadecimal)结尾,如79h 。因为本书中大量使用了这
一数志,所以将 "h" 省略
各进制数间可进行等值转换,可使用 wqx 上科学计算器实现计算机只能识别 1,0代表的两种信息,所以在计算机中运行的是二进制数,而计算机中所谓的8 位机,则是指6502 一次处理数据长度为 8 位
逻辑运算知识
6502 多用于控制领域,因此 6502 系统中存在大量逻辑运算,基本的逻辑运算有: " 与 ","或"," 非", 基本逻辑运算再经简单的组合,便可构成复合逻辑门,如" 与非门 "," 或非门 "," 异或门"等等,下面讲解它们 a.逻辑与逻
辑表达式为 :f=a^b
a,b 为 2 事件,只有当a,b 皆为真时,结果 f 才为真,否则 f 为假
f=a^b 的逻辑状态表 :
0^0=0 0^1=0 1^0=0
1^1=1
规则可总结为 :"有 0 则 0, 全 1 则 1"
与操作在实际中常于于屏蔽( 修改 )或测试 (获取 ) 数据中某个或某几个位的状态
如lda$80
and#$40(10000000b)
sta$80
rts
这样就可以屏蔽$80中的6-0位
b.逻辑或
逻辑或的表达式为 :
f=a ˇb
逻辑状态表为 :
0 ˇ 0=1 0 ˇ 1=1 1 ˇ 0=11规则ˇ可总1=1结为 :"有
1则1,全0则 0"
或操作常用来置位,如将 $80的 0,1位置 1:
lda$80
ora#$03(00000011b)
sta$80
rts
和上面是一样的,现在$80里就又是原来的数据了,这里#$79就是密码,没有它就无法解开加密后的数据
6502寄存器知识
触发器是一类具有记忆能力的基本逻辑电路
触发器就是一位寄存器,可以存放1位二进制信息,并且有接收和输出二进制数的功能,
N 个触发器便可构成N 位的寄存器
6502 中共有 5 个 8 位寄存器和 1 个 16位寄存器
1.累加寄存器 A
这是 8 位的寄存器,也是6502中最重要和最常用的寄存器,可用于读写数据,进行各种
逻辑运算等等。
2.变址寄存器 X
这个 8 位寄存器和 A 差不多,只是它可以非常方便地加1 或减 1 ,常用于数据传送,运算等等 3. 变址寄存器Y
和 X 一样, 2 个变址寄存器搭配使用使程序更加灵活
4.堆栈指针 SP
这是 8 位的寄存器,指向对栈栈顶位置
在程序运行时。须要一称之为堆栈的RAM块作为数据缓冲区,以暂存程序运行过程中的一
些重要数据
堆栈由连续的RAM单元组成。数据写入堆栈称入栈,数据从堆栈中读出称为出栈,堆栈的操作遵循 "先进后出 "的操作,即先入栈的数据后出栈。
系统如何了解当前的堆栈顶在哪以从顶部弹出堆栈呢?
就要依靠堆栈指针SP,6502规定,堆栈位于第一页($0100-$01ff)的RAM中,因此SP 指向的时堆栈顶的低8 位,即堆栈顶地址为$00SP,当进行入栈、出栈操作时,栈顶单
元发生变化, SP 的内容也将加 1 或减 1
可以用下面程序读出当前SP 的内容 :
TSX
STX$2000
RTS