




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.6502基础知识:6502 cpu是8位的处理器,早期的nes(任天堂娱乐系统)即是采用了此种cpu,特点是功耗小,成本低,稳定性强,缺点嘛,自然是很明显,速度慢,能处理的任务类型少,而且,相对于nes,wqx还少了象处理图象和声音的专用芯片(nc2k后的系统增加了高速处理芯片dsp来作为声音处理,因此使在其上播放wav成为可能)。以后,我们使用汇编语言,就都要和这个6502芯片打交道了,让我们熟悉一下它。和pc上的8080cpu一样,6502 cpu也有一套指令集,cpu识别指令,进行相应的操作。这些指令都是16进制的,比如:a9h 01h 85h 80h 60h,在16进制数据后面加上一
2、个h(hex),来将它们和其它进制区分开来,以后的内容里,16进制后将不加h,其它进制(10进制后加d(dec),2进制后加b(bin)则将特别说明。上面的那段数据:a9 01 85 80 60,就是一段机器码,也是一段汇编程序,汇编的写法如下:lda#$01sta$80rts这段命令的用途将在以后介绍,这里只是让大家了解一下汇编及机器码程序的书写格式。这些数据以二进制的格式被存储在wqx的存储介质里(一般为ram,flash,rom),由cpu控制不断从存储介质中读取并分析执行。数和运算相关知识这节讲解进制、逻辑运算知识,若已经知道,可跳去下一节(1)进制:a.常见的计数制:10进制,这是大
3、家熟悉的,由0-9这10个数码组成,逢10进位,表示时在数码后加d(decimal),由于很常用,常省略db.二进制数:只有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。因为本书中大量使用了这一数志,所以将h省略各进制数间可进行等值转换,可使用wqx上科学计算器实现 计算机只能识别1,0代表的两种信息,所以在计算机中运行的是二进制数,而计算机中所谓的8位机,则是指6502一次处理数据
4、长度为8位逻辑运算知识6502多用于控制领域,因此6502系统中存在大量逻辑运算,基本的逻辑运算有:与,或,非,基本逻辑运算再经简单的组合,便可构成复合逻辑门,如与非门,或非门,异或门等等,下面讲解它们a.逻辑与逻辑表达式为:f=aba,b为2事件,只有当a,b皆为真时,结果f才为真,否则f为假f=ab的逻辑状态表:00=0 01=0 10=011=1规则可总结为:有0则0,全1则1与操作在实际中常于于屏蔽(修改)或测试(获取)数据中某个或某几个位的状态如lda$80and#$40(10000000b)sta$80rts这样就可以屏蔽$80中的6-0位b.逻辑或逻辑或的表达式为:f=ab逻辑状
5、态表为:00=1 01=1 10=111=1 规则可总结为:有1则1,全0则0或操作常用来置位,如将$80的0,1位置1:lda$80ora#$03(00000011b)sta$80rts和上面是一样的,现在$80里就又是原来的数据了,这里#$79就是密码,没有它就无法解开加密后的数据6502寄存器知识触发器是一类具有记忆能力的基本逻辑电路触发器就是一位寄存器,可以存放1位二进制信息,并且有接收和输出二进制数的功能,n个触发器便可构成n位的寄存器6502中共有5个8位寄存器和1个16位寄存器1.累加寄存器a这是8位的寄存器,也是6502中最重要和最常用的寄存器,可用于读写数据,进行各种逻辑运算
6、等等。2.变址寄存器x这个8位寄存器和a差不多,只是它可以非常方便地加1或减1,常用于数据传送,运算等等3.变址寄存器y和x一样,2个变址寄存器搭配使用使程序更加灵活4.堆栈指针sp这是8位的寄存器,指向对栈栈顶位置在程序运行时。须要一称之为堆栈的ram块作为数据缓冲区,以暂存程序运行过程中的一些重要数据堆栈由连续的ram单元组成。数据写入堆栈称入栈,数据从堆栈中读出称为出栈,堆栈的操作遵循先进后出的操作,即先入栈的数据后出栈。系统如何了解当前的堆栈顶在哪以从顶部弹出堆栈呢?就要依靠堆栈指针sp,6502规定,堆栈位于第一页($0100-$01ff)的ram中,因此sp指向的时堆栈顶的低8位,
7、即堆栈顶地址为$00sp,当进行入栈、出栈操作时,栈顶单元发生变化,sp的内容也将加1或减1可以用下面程序读出当前sp的内容:tsxstx$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=0i:中断标志。是否允
8、许系统中断irq,=1:禁止,=0:允许z:零标志,结果是否为0,为0则z=1,否则z=0c:进位标志,结果最高位有进位则c=1,否则c=05.程序计数器pc这是6502唯一的一个16为计数器,其内容为将要执行命令的存放地址,寻址范围达64kb($0000-$ffff),cpu是根据pc的内容找到指令的存储单元,取出指令执行的。pc具有自动加1的功能,cpu每读取一条指令的1字节,pc内容自动加1,指向下一个存储单元,这样就能实现程序的顺序执行pc没有地址,用户不能对它进行读写,但可以通过转移,调用,返回等指令改变其内容,以改变程序的执行顺序6502主要组成设备这节讲解wqx的主要组成部件1.
9、软件就是我们编写或下载的程序和系统的部分,6502系统包括软件和硬件两个方面。2.存储器主要作用是存放程序和数据,6502系统的存储单元为8位,每位都是一个二进制数,即每个存储单元存放一个8位的进制数,也就是一个字节。向存储单元存放信息称为写,取出信息称为读,读,写操作都称为访问存储器。6502访问存储器是根据存储单元的地址进行的,根据地址访问存储单元又称为寻址。6502的cpu最大寻址范围为64kb,即$0000-$ffffwqx有512kb的闪存和数mb的rom,而cpu却只能寻址64kb,这个问题是如何解决的呢?和早期的dos系统一样,系统对存储器采取了分页访问的方法,以nc1020的5
10、12kb闪存为例,第00页的$4000-$bfff为512kb的第一个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 fl
11、ash是可多次擦除的存储器,wqx用的是512kb的nor flash,flash存储器内容不易丢失。nor flash的特点是读取速度快,性能稳定,可以芯片内执行,缺点则是容量小,写入速度慢,nc2k以前的机型将其作为系统/数据存储器,nc2k以后的机型则将其作为系统和一些重要数据的存储器d.nand flash这是一种容量很大的flash存储器。nc2k使用的是32mb的nand flash,它的特点是容量大,擦写速度快,缺点是稳定性较差(易出现坏区),读写复杂,同时读取速度较慢e.sram主要的随机存储器也即内存,分布在各系统的$0000-$3fff($0000-$003f映射到系统i/
12、o)f.xramnc2k后的机型为了适应nand flash增加的32k大内存,位于$80页4000-bfffg.rambnc2k系统作为坏区表等信息存放处h.ram04$00页的$4000-$5fff($6000-$7fff为其镜象),8k的内存3.cpu 中央处理器(central processor unit,cpu)是整个6502系统的核心,由运算器和控制器组成,进行运算和控制操作。a.运算器是6502的运算部件,内有逻辑运算单元,可以实现加、减、加1、减1、比较等算术运算和与、或、异或等逻辑运算。b.控制器是6502的指挥控制元件,保证wqx各部分能自动而协调地工作。4.i/o接口w
13、qx在工作时,要不断从外部设备,比如键盘等获取信息,并向外部设备,比如屏幕,发送控制信号,这些信息的输入输出电路称为i/o(input/output),i/o口是系统和外部设备之间交换信息的通道wqx共有64个8位i/o口,分别被映射到sram的$0000-$003f,直接对改段地址进行操作即可操作i/o5.其它外部设备很多设备是不能集成到6502主板上的,比如lcd,红外/串口通讯设备,键盘,电源(电池和外部电源接口),时钟电路,发音设备等等,它们称为外部设备,一般通过i/o接口对它们进行访问。使用debug工具这是本章最后一节,这里我将告诉大家如何使用debug工具,这可是很重要的!目前w
14、qx使用的debug工具有xasm(by xu),wqxhex(by sun),nc-tools(by xu)等等,这里我强烈推荐nc-tools这个工具!这是我有史以来用过的最好的debug工具了。nc-tools 1020和2600分别在的下载区和星迷天地区可得到最新版本。nc1020版nc-tools可用于nc1020/n,cc880,cc980;nc2600版可用于nc-2600,如果你的机型没由相应的nc-tools,用sun的wqxhexeditor也可。这里只介绍和汇编编程相关的一些命令的用法,其它功能请参考nc-tools使用说明按键操作
15、:空格:命令确定方向上:当前浏览位置+10下:减10换姨烫烫烫烫烫烫烫烫烫烫烫坛上:加1下:加60方向左:减1方向右:减60q:退出求助:工具菜单:切换hex/中文:直接以文字修改当前存储器内容:查看寄存器状态:当前页+1:-1+(nc1020):清空$2000-$30001.v命令转到地址格式:v xxxxv xxxxyyxxxx为地址yy为页2.e c修改存储器内容e c xxxxe c xxxxyy3.e i插入数据e i xxxxxxxx:移动范围yy:删除个数5.c 比较数据c x000yyx000:地址 yy页将yy页x000-xfff和$2000-$2fff比较6.a 写汇编a
16、xxxxyya xxxx只能在ram写方向上=$换页上=#左=)方向下=,右=y.=b换页下=(7.s h 搜索hexs h xxxxyyyyxxyyxxxx xx 开始地址、页yyyy yy 结束地址、页8.s c 搜索文字s c xxxxyyyyxxyy9.u反汇编u xxxxu xxxxyy10 g 执行g xxxxg xxxxyy11.w 写入w x000yy将$2000-$2fff写入$x000-$xfff12.l 发送l x000yy将$2000-$2fff写入$x000-$xfff12.l 发送l x000yy将yy页x000-xfff发送到$2000-$2fff13.x 求in
17、t中断地址x yyyyyyyy:中断向量寻址方式掌握6502的寻址方式才能弄懂6502的指令,因此这节很重要#$xx:指令#$zz:数据(8位)$yy:地址(8位零页地址)$yyyy:地址(16位)(1)立即寻址方式格式: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个地址,
18、其中$00-$ff称为零页,对他们的寻址称为零页寻址,可以看出,由于零页寻址的指令为2字节,较普通寻址要快,因此使用零页寻址的指令可提高程序运行速度(3)寄存器隐含寻址格式:xx如:tayphp在这种寻址方式中,所需的数据并没有直接给出,也没有给出地址,而是将某个寄存器的内容作为操作数,常用于寄存器间交换数据等(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
19、,x当x=5时,那么所要寻址的操作数就在$1005(4)间接寻址格式:xx($yy,x) or xx($yy),y or jmp($xxxx)如:cmp($80,x)lda($80),y所谓间接寻址就是指操作数所在的地址或所需跳转的地址并不直接给出,而是在所给出的地址中如:lda($80,x)当x=5,$85=00,$86=20那么所要的操作数就在$2000中 即在$80+5,$81+5存放了地址如:lda($80),y当y=5,$80=00,$81=20 那么操作数就在$2005中,即将$80,$81中地址+5(y)如jmp($2000)$2000=00,$2001=30那么就会跳转到$30
20、00间接寻址是很重要的一种寻址方式,刚开始时你也许会觉得使用直接寻址很简单,但用多了就会发现,间接寻址的灵活方便是直接寻址无法相比的(6)相对寻址格式:xx$yyyy如:bcs$2000相对寻址是相对于当前地址的跳转指令寻址,可向前或向后跳转,范围在+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),
21、y的间接y寻址方式指令分为一字节、二字节、三字节指令,分别占用1,2,3 b的存储空间,一、二字节的指令比三字节指令所占空间少,速度快1.数据传输指令这里的传输是复制,而不是移动(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将保存在堆栈最
22、上的数据弹出-a,s=s+1(13)phpp-stack,s=s-1(14)plpstack-p,s=s+1(15)tsxs-x(16)txsx-s2.数据操作指令(1)oraa=a or data(2)eora=a xor data(3)anda=a and data(4)asl逻缉左移,将data中各位依次向作移一位,最高位-c,相当于x2a(or data)=a(or data)=a(or data)/2(6)rol循环左移(7)ror循环右移(8)bit相当于and,只是与操作的结果不放入a中,而只是影响标志位a=a+c+data这带c进位的加法,若c=1,则a=a+data+1因此在单个数据加法时要将c位清0如:lda#$80clcadc#$05sta$2000rts此时结果为85 而在多个数据加法时,仅在最低位加法时清0如2030+5080lda#$30clcadc#$80sta$200
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 带钢热轧智能控制系统
- 货车司机长途驾驶心理调节
- 保险公司项目活动方案
- 保险父亲节活动方案
- 信贷大讨论活动方案
- 修车喷漆活动方案
- 俱乐部才艺活动方案
- 倒车入库比赛活动方案
- 值日老师活动方案
- 假期kTV活动方案
- 2025年部编版语文小学四年级下册课内阅读专项复习题(有答案)
- 配资协议合同
- 制冷设备施工方案
- 《临床检验基础》课件-临床检验基础第一章:绪论
- 裱花晋级考核标准
- 办公室管理-形考任务二(第一~第二章)-国开-参考资料
- 2025年农村土地纠纷调解协议书
- 项目管理与工期控制
- 行业周期波动中的政策导向-洞察分析
- 河南省驻马店市2023-2024学年高二下学期7月期末考试 英语 含解析
- 2025年中国中煤能源集团限公司招聘10人高频重点提升(共500题)附带答案详解
评论
0/150
提交评论