⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6502基础知识.txt

📁 在网上搜集的一些关于6502的资料,在win2000下调试通过了,有vb也有vc的程序,还有一些6502基础命令学习,对想学6502汇编的有一定的帮助,如何使用,详细看里面有说明文件:)
💻 TXT
📖 第 1 页 / 共 5 页
字号:
----------------------------------------------------------------------------- 
1.7 指令系统 
这是本章的最后一节,将详细讲解指令系统 
$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.数据传输指令 
这里的传输是"复制",而不是"移动" 
(1)lda 
data->a 
(2)ldx 
data->x 
(3)ldy 
data->y 
(4)sta 
a->addr 
(5)stx 
a->addr 
(6)sty 
a->addr 
(7)tay 
a->y 
(8)tya 
y->a 
(9)tax 
a->x 
(10)txa 
x->a 
(11)pha 
a->stack 
堆栈是由系统开辟的一块用于保护数据的区,在$0100-$01ff间,用于存放一些数据 
这里pha将a放入了堆栈中,同时堆栈指针s=s-1 
(12)pla 
stack->a 
将保存在堆栈最上的数据弹出->a,s=s+1 
(13)php 
p->stack,s=s-1 
(14)plp 
stack->p,s=s+1 
(15)tsx 
s->x 
(16)txs 
x->s 

2.数据操作指令 
(1)ora 
a=a or data 
(2)eor 
a=a xor data 
(3)and 
a=a and data 
(4)asl 
逻缉左移,将data中各位依次向作移一位,最高位->c,相当于x2 
a(or data)=<<a(or data)=a(or data)*2 
(5)lsr 
a(or data)=>>a(or data)=a(or data)/2 
(6)rol 
循环左移 
(7)ror 
循环右移 
(8)bit 
相当于and,只是与操作的结果不放入a中,而只是影响标志位 
(9)adc 
a=a+c+data 
这带c进位的加法,若c=1,则a=a+data+1 
因此在单个数据加法时要将c位清0 
如:lda#$80 
clc 
adc#$05 
sta$2000 
rts 
此时结果为85 而在多个数据加法时,仅在最低位加法时清0 
如2030+5080 
lda#$30 
clc 
adc#$80 
sta$2000 
lda#$20 
adc#$50 //注意这里就不要清c了 
sta$2001 
rts 
结果为70B0 
(10)sbc 
带c借位减法 
a=a-c-data 
减法和加法类似,在单个数据减法时,需将c位置1 
如lda#$80 
sec 
sbc#$20 
sta$2000 
rts 
多个数据加减最低位要令c置1,其它不要 
如:2050-1020 
lda#$50 
sec 
sbc#$20 
sta$2000 
lda#$20 
sbc#$10 
sta$2001 
rts 
(11)dex 
x=x-1 
(12)dey 
y=y-1 
(13)inx 
x=x+1 
(14)iny 
y=y-1 
(15)inc 
data=data+1 
(16)dec 
data=data-1 
3.数据比较指令 
(1)cmp 
比较 a和 data 
若相等,z=0 
a>data c=1 
a<data c=0 
(2)cpx 
比较x和data 
(3)cpy 
比较y和data 
4.跳转指令 
(1)bne 
if z=1 then ... 
(2)beq 
if z=0 then ... 
(3)bcs 
if c=1 then ... 
(4)bcc 
if c=0 then ... 
(5)bvs 
if n=0 then ... 
(6)bmi 
if n=1 then .... 
(1)-(6)皆为相对寻址 
(7)jsr 
调用子程序,遇rts返回 
如: 
2000:lda#$20 
jsr$2100 
sta$2000 
rts 
2100:clc 
adc#$20 
rts 
(8)jmp 
无条件跳转至地址 
jmp($xxxx) 
间接寻址跳转 
5.位操作指令 
(1)sec 
set c=1 
(2)clc 
set c=0 
(3)sei 
set i=1 
(4)cli 
set i=0 
(5)sed 
set d=1 
(6)cld 
set d=0 
(7)clv 
set v=0 
6.中断相关指令 
(1)int 
执行软中断 
(2)rti 
从中断返回 
7.其它指令 
(1)nop 
什么也不做,空耗一个机器周期,用于延时等 
(2)rts 
从子程序返回或结束主程序 
第二章 编写程序 
第一节 BIN文件结构 
第二节 第一个汇编程序 
第三节 程序分析 
第2章 
+----------+ 
+ 编写程序 + 
+----------+ 
第一节 BIN文件结构 
我们要用汇编来编写一个WQX上的可执行文件-BIN文件 
首先要熟悉BIN文件的结构 
1.文件0-2字节 作用是BIN文件的标志,在NC1020中,可能有2种情况,1是AE EE EA,系统将把BIN文件装载到$04-$0F页中的任一页$4000开始的地址,然后跳转到这一页,运行之 
另一种是"A5 55 5A",系统将把文件复制到内存$2000开始的地址,运行之 
NC2k之后的系统则只有"AE EE EA"这种情况,系统将把文件复制到$80页XRAM的$4000开始的地址,运行之 
2.文件3-6字节:是表示文件大小,实际上系统并不使用这一数据,因次可以不管,可以使其为"00 10 00 20"就好了 
3.文件7-9字节:"4C XX YY",4C是固定的,$YYXX则是要文件的入口 
比如是这样的"4C FF 40"那么在载入了BIN文件后,就会跳转到$40FF来执行之 
4.文件A-F字节:系统版本标志,Nc1020必须为"70 03 10 03 FF FF",NC2k之后的机型一般为"70 03 31 03 FF FF",但若改为其它的也无影响 
接着10-文件尾部,就是BIN文件的正式内容了,代码和数据都是在这里的 
另外,NC机型上的BIN文件在传入电脑后,都会被加密,而传回WQX后则会被解密 
因此若要在电脑端编辑BIN文件,则需使用BIN解密工具如BXSY的NC加解密 
第二节 第一个汇编程序 
我们现在来编写一个汇编程序,它的作用是显示一个信息框 
首先是进入DEBUG工具 
比如在NC1020上使用NC-TOOLS,NC2k上使用WQXDEBUG,TOOLS-2600,WQXHEXNC等 
这里以使用TOOLS-2600在NC2600上为例,nc2000可用tools-2000 
tool-2600可生成*.com文件,其格式和运行方式同第一节所说的nc1020的"aa 55 5a"相同 进入TOOLS-2600 
进入HEX的界面后 
按下求助,选择"6.清空内存",$2000-$3000的数据将被清除 
输入V 2013,空格 //每次输入后都要按空格,下同按下"输入法"键,输入文字"Hello world!" 
输入e c 201f,输入数据00 00 80 13 20 18 10 0c 02 27 20 
到这里数据部分就完成了 
输入 
A 202a,空格 
最底下会出现202a- 
这时就会要输入汇编代码: 
输入以下代码: 
LDX#$21 
LDY#$20 
LDA#$00 
INT$CA12 
INT$C00A 
RTS 
输入a 2010 
输入代码: 
jmp$202a 

输入中,方向上为"$",方向下为",",翻页上为"#",翻页下为"(",方向左为")",方向右为"y","."为"b",若输入不正确,可按"k"消去刚输入的一个符号 
这样,一个程序就算是完成了,运行一下看看 
输入G 2010 
看到效果了吧! 
接着按下"求助"->"应用程序",选择"制作程序",给这个程序起个名字,比如"message",确定,然后在COM程序目录下就会多了个message.com文件 
用com平台运行它,就可看到效果了 
第三节 程序分析 
现在我们来分析上面说的那个程序, 
首先,我们输入的信息"Hello World!"是待显示的信息 
那些80 13 20....则是一个表,信息框的显示程序利用这个表来了解如何显示文字 
表的格式是这样的: 
80 ;固定标志 
13 20 ;要显示文字的位置,这里即是$2013,文字的最要跟2个00 
18 10 ;信息框的x,y轴位置 
0c ;文字长度,不包括00 
02 ;信息框行数x2,这共一行,因此是02,若是2行,则是04,3行是06...以此类推 
27 20 ;是信息框文字显示类型的地址,这里是$2027,$2027为02,则显示类型为02,正常,修改02为其它值如82,可看到一些其它的效果,如反显,小字等等 

接着输入的那段程序则是关键的程序部分了 
ldx#$21 
ldy#$20 
这个是定义上一步那个表的地址,这里是$2021 
lda#$00 
这里是显示的信息框类型,00表示是普通的信息框 
01表示单选框 
02是是否选择框,图标为"!" 
03是是否选择框,图标是"?" 
接着是 
int$ca12 
int$c00a 
这2个都是调用系统中断,int$ca12的作用是跟据前面设定的参数来显示文字信息框 
int$c00a则是和gvbasic里的inkey$一样,获得一次按键停顿,然后才接着运行,好让用户看清显示 
最后rts ;结束程序 
int中断向量 
如int$ca12这样的代码称为中断调用(brk),其计算方法如下: 
若设int$abcd(如int$0517,那么a=0,b=5,ab=05,cd=17) 
1.若ab在$01-0f之间,a ab则从ab页的地址$4000+cd*2和$4001+cd*2取数据xx,yy,运行$yyxx 
2.若ab=$0 则从0页地址$8000+cd*2和$8001+cd*2处取数据xx,yy,运行$yyxx 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -