6502基础知识_第1页
6502基础知识_第2页
6502基础知识_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、6502 根底知识:6502 CPU 就是8位的处理器,早期的nes(任天堂娱乐系统)即就是采用了此种cpu,特点就是功耗小,本钱低,稳定性强,缺点嘛,自然就是很明显,速度慢,能处理的任务类型少,而且, 相对于NES,WQX 还少了象处理图象与声音的专用芯片(NC2k 后的系统增加了高速处理芯片DSP来作为声音处理,因此使在其上播放 WAV成为可能)。以后,我们使用汇编语言,就都要与这个6502 芯片打交道了,让我们熟悉一下它。与PC上的8080CPU 一样,6502 cpu也有一套指令集,cpu识别指令,进行相应的操作。这些指令都就是16进制的,比方:a9h 01h 85h 80h 60h,

2、在16进制数据后面加上一个"h"(hex),来将它们与其它进制区分开来,以后的内容里,16 进制后将不加h,其它进制(10进制后加"D"(dec),2 进制后加"B"(bin)那么将特别说明。上面的那段数据:a9 01 85 80 60,就就是一段机器码,也就是一段汇编程序,汇编的写法如下:lda#$01sta$80rts这段命令的用途将在以后介绍,这里只就是让大家了解一下汇编及机器码程序的书写格式。这些数据以二进制的格式被存储在wqx的存储介质里(一般为ram,flash,rom), 由cpu控制不断从存储介质中读取并分析执行。数与

3、运算相关知识这节讲解进制、逻辑运算知识,假设已经知道,可跳去下一节(1)进制: a、常见的计数制10 进制,这就是大家熟悉的,由0-9 这10 个数码组成,逢10 进位,表示时在数码后加D(Decimal), 由于很常用,常省略"D"b、二进制数:只有0,1两个数码,逢2进位,用B(Binary) 结尾,如11110000Bc、十六进制数|有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。因为本书中大量使用了这一数志,所以将"

4、;h"省略各进制数间可进行等值转换,可使用wqx上科学计算器实现计算机只能识别1,0代表的两种信息,所以在计算机中运行的就是二进制数,而计算机中所谓的8位机,那么就是指6502 一次处理数据长度为 8位逻辑运算知识6502 多用于控制领域,因此6502 系统中存在大量逻辑运算,根本的逻辑运算有:"与","或 ","非",根本逻辑运算再经简单的组合,便可构成复合逻辑门,如"与非门",或非门",异或门等等,下面讲解它们a、逻辑与逻辑表达式为:f=aAba, b为2事件,只有当a,b皆为真时,结果f才

5、为真,否那么f为假f=aAb的逻辑状态表:0A0=0 0人仁0 1A0=01A仁1规那么可总结为:"有0那么0,全1那么1" 与操作在实际中常于于屏蔽 (修改)或测试(获取)数据中某个或某几个位的状态如 lda$80 an d#$40(10000000b)sta$80rts这样就可以屏蔽$80中的6-0位b、逻辑或逻辑或的表达式为:f=a vb逻辑状态表为:0 v 0=1 0 v 1=1 1 v 0=1规那么可总结为:"有1那么1,全0那么0"或操作常用来置位,如将$80的0,1位置1:lda$80ora#$03(00000011b)sta$80rts与

6、上面就是一样的,现在$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个变址存放器搭配使用使程序

7、更加灵活4、堆栈指针SP这就是8位的存放器,指向对栈栈顶位置在程序运行时。须要一称之为堆栈的RAM 块作为数据缓冲区,以暂存程序运行过程中的一些重要数据堆栈由连续的RAM单元组成。数据写入堆栈称入栈,数据从堆栈中读出称为出栈,堆栈的操 作遵循"先进后出的操作,即先入栈的数据后出栈。系统如何了解当前的堆栈顶在哪以从顶部弹出堆栈呢?就要依靠堆栈指针 SP,6502规定,堆栈位于第一页($0100-$01ff)的RAM 中,因此SP指向的时堆栈顶的低 8位,即堆栈顶地址为$00SP,当进行入栈、出栈操作时,栈顶单元发生 变化,SP的内容也将加1或减1可以用下面程序读出当前SP的内容:TSX

8、STX$2000RTS这时$2000 即为SP的内容5、程序状态字 PSW(Program Status Word)这也就是8位存放器,用于存放指令执行的状态信息,PSW的各位状态有的就是根据指令执行的结果由硬件自动设置的,有的可以由用户用软件的方法设定。PSW的各位如下(其中第5位未用,保持为0)7 6 5 4 3 2 1 0N V B D I Z CN:负数标志,指令指行完后为负(>7F)那么n=0,否那么为1V:溢出标志,假设产生溢出那么 V=1,否那么V=01:中断标志。就是否允许系统中断IRQ,=1:禁止,=0:允许Z:零标志,结果就是否为0,为0那么Z=1,否那么Z=0C:进

9、位标志,结果最高位有进位那么C=1,否那么 C=05、程序计数器PC这就是 6502 唯一的一个 16为计数器,其内容为将要执行命令的存放地址,寻址范围达64KB($0000-$FFFF),CPU就是根据PC的内容找到指令的存储单元,取出指令执行的。PC具有自动加1的功能,CPU每读取一条指令的1字节,PC内容自动加1,指向下一个存 储单元,这样就能实现程序的顺序执行PC没有地址,用户不能对它进行读写,但可以通过转移,调用,返回等指令改变其内容,以改变 程序的执行顺序6502 主要组成设备这节讲解wqx的主要组成部件1、软件2、存储器主要作用就是存放程序与数据 ,6502系统的存储单元为 8位

10、,每位都就是一个二进制数,即每个存储单元存放一个 8位的进制数,也就就是一个字节。向存储单元存放信息称为写",取出信息称为读",读","写"操作都称为访问存储器。6502访问存储器就是根据存储单元的地址进行的,根据地址访问存储单元又称为寻址。6502 的cpu最大寻址范围为 64kb,即$0000-$ffffwqx有512kb的闪存与数 mb的rom,而cpu却只能寻址64kb,这个问题就是如何解决的呢?与早期的dos系统一样,系统对存储器采取了分页访问的方法 ,以nc1020 的512kb 闪存 为例,第00 页的$4000-$bfff 为5

11、12kb 的第一个 32kb,第01 页的$4000-$bfff 为 512kb 的第二个32kb、以此类推,这样即可对大容量的存储器进行访问。至于nc2k的nand flash 存储器,与这有些不同,这将在以后详细讲解。Wqx主要有下面这些存储器:a、Mask ROM这就是种不可写的存储器,又称为掩膜 ROM,也就就是说对于此种存储器来说,只能进行读操作。在 NC1020 中分步在 80-FF 页$4000-BFFFb、System bios这就是种特殊的rom,就是系统的bios,存放了中断处理例程,系统重要的函数等等 位于各系统的$e000-$ffffc、Nor Flash就是可屡次擦除

12、的存储器,wqx用的就是512kb 的nor flash,Flash 存储 器内容不易丧失。nor flash 的特点就是读取速度快,性能稳定,可以芯片内执行,缺点那么就是 容量小,写入速度慢,nc2k 以前的机型将其作为系统/数据存储器,nc2k 以后的机型那么将其 作为系统与一些重要数据的存储器d、nand flash这就是一种容量很大的flash存储器。nc2k使用的就是32mb 的nand flash,它的特点就是容量大,擦写速度快,缺点就是稳定性较差易出现坏区,读写复杂,同时读取速度较慢e、sram主要的随机存储器也即内存,分布在各系统的$0000-$3fff$0000-$003f映

13、射到系统i/of、xramnc2k后的机型为了适应 nand flash 增加的32k大内存,位于$80页4000-bfffg、rambnc2k系统作为坏区表等信息存放处h、ram04$00 页的 $4000-$5fff$6000-$7fff为其镜象,8k 的内存3、CPU 中央处理器Central ProcessorUnit,CPU 就是整个6502 系统的核心,由运算器与控制器组成,进行运算与控制操作。a、 运算器就是6502的运算部件,内有逻辑运算单元,可以实现加、减、加1、减1、比较等算术运算与与、或、异或等逻辑运算。b、 控制器就是6502的指挥控制元件,保证wqx各局部能自动而协调

14、地工作。4、I/O 接口wqx在工作时,要不断从外部设备,比方键盘等获取信息,并向外部设备,比方屏幕,发送控制 信号,这些信息的输入输出电路称为1/0(1 nput/0utput),l/0口就是系统与外部设备之间交换信息的通道WQX共有64个8位I/O 口,分别被映射到sram 的$0000-$003f,直接对改段地址进行操作即可操作I/O5、其它外部设备很多设备就是不能集成到 6502 主板上的,比方led,红外/串口通讯设备,键盘,电源(电池与 外部电源接口 ),时钟电路,发音设备等等,它们称为外部设备,一般通过I/O 接口对它们进行 访问。使用debug 工具这就是本章最后一节,这里我将

15、告诉大家如何使用debug工具,这可就是很重要的!目前 wqx 使用的 debug 工具有 xasm(by xu),wqxhex(bysun),nc-tools(byxu)等等,这里我强烈推荐nc-tools这个工具!这就是我有史以来用过的最好的debug工具了。nc-tools1020 与2600分别在的下载区与星迷天地区可得到最新版本。nc1020版nc-tools 可用于 nc1020/n,cc880,cc980;nc2600版可用于 nc-2600,如果您的机型没由相应的 nc-tools, 用sun的wqxhexeditor 也可。这里只介绍与汇编编程相关的一些命令的用法,其它功能请

16、参考n c-tools使用说明按键操作:空格:命令确定 方向上:当前浏览位置+10下:减10换姨烫烫烫烫烫烫烫烫烫烫烫坛上:加1下:加60方向左:减1方向右:减60q:退出求助:工具菜单<中英数 >:切换hex/中文<输入法 >:直接以文字修改当前存储器内容<r>:查瞧存放器状态<i>:当前页+1<k>:-1<z>+<h>(nc1020):清空 $2000-$30001、v命令转到地址格式:v xxxxv xxxxyyxxxx为地址yy为页2、ec修改存储器内容 e c xxxxe c xxxxyy3、ei插入

17、数据e i xxxxxxxx:移动范围yy:删除个数5、c比较数据cxOOOyyxOOO:地址yy页比较将 yy 页 xOOO-xfff与 $2000-$2fff6、a写汇编a xxxxyya xxxx只能在ram 写方向上="$"换页上="#"左=")"方向下=","右="y""、"="b"换页下="("7、s h 搜索 hex s h xxxxyyyyxxyyxxxx XX开始地址、页yyyy yy 结束地址、页8、s c搜索文字s

18、 cxxxxyyyyxxyy9、u反汇编u xxxxu xxxxyy10 g 执行g xxxxg xxxxyy11、w 写入w xOOOyy将$2000-$2fff写入 $xOOO-$xfff12、I发送lxOOOyy将$2000-$2fff写入 $x000-$xfff12、I发送Ix000yy将 yy 页 xOOO-xfff 发送到 $2000-$2fff13、x求int中断地址x yyyyyyyy:中断向量寻址方式掌握6502的寻址方式才能弄懂6502 的指令,因此这节很重要#$xx:指令#$zz:数据(8位)$yy:地址(8位零页地址)$yyyy:地址(16 位)(1) 立即寻址方式格式

19、:xx#$zz如 lda#$05要寻址的数据在后面已给出,称为立即寻址(2) 直接寻址方式格式:xx$yy or xx$yyyy如:LDA$1EADC$2300要寻址的数据在所给出的地址中,该地址的内容即为所需数据这里分为零页寻址(xx$yy)与普通寻址(xx$yyyy) |xx$yy就相当于xx$00yycpu将$0000-$ffff的可寻址范围分为 0-ff 个页面,每页面ff个地址,其中$00-$ff 称为零页,对她们的寻址称为零页寻址,可以瞧出,由于零页寻址的指令为2字节,较普通寻址要快因此使用零页寻址的指令可提高程序运行速度(3) 存放器隐含寻址 格式:xx如:tayphp在这种寻址

20、方式中,所需的数据并没有直接给出,也没有给出地址,而就是将某个存放器的内容作为操作数,常用于存放器间交换数据等(4) 直接x变址,直接y变址格式:xx$yyyy,xor xx$yyyy,yor xx$yy,yor xx$yy,x如:lda$1000,xlda$1000,ylda$80,xlda$80,y这种寻址方式就是在直接寻址的根底上,再加上x或y存放器的内容,获得操作数所在地址如 lda$1000,x当x=5时,那么所要寻址的操作数就在$1005间接寻址格式:xx($yy,x) or xx($yy),y or jmp($xxxx)如:cmp($80,x)lda($80),y所谓间接寻址就就

21、是指操作数所在的地址或所需跳转的地址并不直接给出,而就是在所给出的地址中如:lda($80,x)当 x=5,$85=00,$86=20那么所要的操作数就在$2000 中 即在$80+5,$81+5 存放了地址如:lda($80),y当y=5,$80=00,$8仁20那么操作数就在 $2005 中,即将$80,$81 中地址+5(y)如 jmp($2000)$2000=00,$2001=30那么就会跳转到$3000间接寻址就是很重要的一种寻址方式,刚开始时您也许会觉得使用直接寻址很简单,但用多了就会发现,间接寻址的灵活方便就是直接寻址无法相比的(6)相对寻址格式:xx$yyyy如:bcs$200

22、0相对寻址就是相对于当前地址的跳转指令寻址,可向前或向后跳转,范围在+7f-7f之间指令系统$xxxx:16 位地址#$xx:数据$xx:零页地址data:地址中数据addr:地址stack:堆栈 a,x,y,p,s:存放器z,n,c,v,d,i,b:标志存放器p的各位各种指令与寻址方式构成了汇编代码,要注意并非每个指令都有所有的寻址方式,例如cmp指令就只有cmp($xx,x)的间接x寻址方式而没有 cmp($xx),y 的间接y寻址方式指令分为一字节、二字节、三字节指令,分别占用1,2,3 b的存储空间,一、二字节的指令比三字节指令所占空间少,速度快1、数据传输指令这里的传输就是"

23、;复制",而不就是"移动(1) ldadata->a(2) ldxdata->x(3) ldydata->y(4) staa->addr(5) stxa->addr(6) stya->addr(7) taya->y(8) tyay->a(9) taxa->x(10) txax->a(11) phaa->stack间,用于存放一些数据堆栈就是由系统开辟的一块用于保护数据的区,在$0100-$01ff这里pha将a放入了堆栈中,同时堆栈指针s=s-1(12) plastack->a将保存在堆栈最上的数据弹出

24、->a,s=s+1(13) phpp->stack,s=s-1(14) plpstack->p,s=s+1(15) tsxs->x(16) txs x->s2、数据操作指令(1) oraa=a or data(2) eora=a xor dataa nd|a=a and data(4)asl逻缉左移,将data中各位依次向作移一位,最高位->c,相当于x2a(or data)=<<a(or data)=a(or data)*2Isra(or data)=>>a(or data)=a(or data)/2rol循环左移ror循环右移(8)bit相当于and,只就是与操作的结果不放入a中,而只就是影响标志位a=a+c+data这带c进位的加法,假设c=1,贝U a=a+data+1因此在单个数据加法时要将c位清0如:lda#$80clc adc#$05sta$2000rts此时结果为85而在多个数据加法时,仅在最低位加法时清 0如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论