6502汇编语言程序设计(2版)之宏汇编语言
来源:互联网 发布:知世喜欢谁 编辑:程序博客网 时间:2024/05/17 01:37
6502汇编语言程序设计(2版)之宏汇编语言
FC技术书籍 2008-11-09 22:05:48 阅读651 评论0 字号:大中小 订阅
宏汇编语言 返回
本章主要介绍步步高多媒体学生电脑的6502宏汇编语言编译系统,基本上适用于一般的6502编译系统.
1. 符号:
以下划线或ASCⅡ字母开头,由下划线、字母和数字组成的字符串.可长达28个字母(视各编译系统而定,有的汇编系统只能允许10个以内).但不能是6502汇编助记符或伪指令中任一个. 例: __start , start0004 .
2. 数字:
十进制数 例: 256 、0 、1398
十六进制数:以$开头,后面紧接一串数字. 例: $60 、$62ca
3. 字符:
以""分界的单个字符. 例: "+" 、"A"
4. 字符串:
以""分界的多个字符. 例: "Hellow ,word"
5. 表达式:
由符号、数字、字符、"+" 、"-" 组成的字符串.
例: start+$20-18+"h"
6. 立即数:
立即数有三种定义:
a. 由#开头,后面紧接一个表达式. 例: #TEST
b. 由#>开头,后面紧接一个表达式,表示取此表达式的低字节. 例 #>openfile
c. 由#<开头,后面紧接一个表达式,表示取此表达式的高字节. 例 #<exit
7. 标号:
标号必须是符号.其定义是从行首开始到以冒号(:)或空白(空格、Tab或行尾)结束的符号.
例: 如下L1 、L2 、L3 、L4均为标号
1) L1 lda #$5
2) L2: lda #5
3) L3: 或 L4
8. BASM汇编指令
BASM汇编指令不分大小写,有:
tax txa tay tya tsx txs
lda ldx ldy sta stx sty
inx dex iny dey dec inc
and ora eor cmp adc sbc cpx cpy
bcc bcs bne beq bmi bpl bvs bvc
cli sei clv clc sec
pha pla php plp
asl lsr rol ror
jsr jmp rts rti bit brk nop
分为以下几类:
1)立即寻址
例: lda 立即数 立即数必须是一个小于256的数. 立即数的定义见前所述.
2) 零页寻址及变址
例: lda 表达式
lda 表达式,x
lda 表达式,y
表达式的值必须是一个小于256的数.
3) 绝对寻址及变址
例: lda 表达式
lda 表达式,x
lda 表达式,y
表达式的值必须是一个大于256的数.
4) 变址 X 间址
例: lda (表达式,x)
表达式的值必须是一个小于256的数.
5) 间址变址 Y
例: lda (表达式),y
表达式的值必须是一个小于256的数.
6) 间址转移
例: jmp (表达式)
9. 伪指令
⑴ org (起始地址)
命令格式 org Data16
org 表示程序中从 Data16 地址开始汇编. Data16 必须大于256,汇编程序中在能产生代码的汇编指令或伪指令之前必须有一个ORG命令,否则会提示出错信息.
程序中可以有多个ORG命令,但ORG的地址不能小于ORG前的指令汇编后的地址,其间的地址空间由$ff填满.
如 ORG $7000 ;从$7000开始汇编
lda #$20 ;占用两个字节到$7002
ORG $7100 ;从$7100开始汇编,$7002到$70ff之间填满$ff
⑵ include (嵌入)
命令格式 include filename
BASM 可以用 include 命令在汇编程序的任何位置插入另一段汇编程序,此程序放在filename的文件中,此命令常用于放置数据及标号定义,以便于BASM自动维护.
在filename的文件中,还可以用include来嵌入另外一个文件,这称为包括文件嵌套.建议嵌套的层数不要超过四层,否则会造成堆栈溢出而死机.同一个文件可以被多个文件嵌入,但只处理一次.
⑶ EQU(定义)
命令格式: 符号(:) equ Data
BASM 可以用 equ 来定义一些便于程序书写和提高程序可读性的标号和常数,其中 equ 之前的符号是被定义的常数字符串或标号,equ 之后的 Data 是一个表达式,此表达式中可以包括以后将要定义的符号.
BASM 在汇编时遇到其值未定的符号,就把此符号作为双字节数进行处理.因此,对于零页单元变量或小于256的常数,必须在用到之前就进行定义,否则汇编结果便会有误,对于大于256的变量或常数,在使用之前可以不必先定义.
例: Var1 equ $80
var2 equ var1+1
⑷ DB (定义字节)
命令格式 [标号] DB 表达式或字符串[,表达式或字符串]
DB 用于定义一个或多个字节数据 , DB 命令之前可以定义一个标号便于程序中其它们置引用,此表达式的值必须是小于256的值. 例: msg: db "hello,world",$00
⑸ DW (定义字)
命令格式 [标号] DW 表达式[,表达式......]
DW 用于定义一个或多个字的数据. DW 命令前可以定义一个标号,便于引用.
例如: fancfilmTable: dw fopen
dw fclose
⑹ DS (定义数据区)
命令格式 [标号] DS 表达式
如需要数据缓冲区或保留一定数量内存单元时,可以用DS命令来定义. DS 之前可以定义一个标号,便于引用. DS 后的表达式表示要保留的内存单元字节数,其值可以小于256,也可大于256,但必须是确定的, BASM 把此地 DS 所定义的内存单元全部清为0.
例如: buffer: ds 400
⑺ @ (当前程序地址)
在汇编程序中有时需要使用当前程序处的地址,可以用不着 @ 代替.
例: testMsg: db $00,$01,$02,$00,$00,$00 ;5个字节
testMsgNum: equ @-testMsg
则 testMsgNum 的值为 testMsg 所定义的字节长度, 即 5
⑻ end (结束)
命令格式 end [label]
end 命令是一个汇编源程序的结束命令,当程序出现 END 命令后,就结束汇编,以后出现的文本不再理会. END 命令后可以有一个标号,表示程序开始执行的起始标号. end 命令可有可无.当无 end 命令时,一直汇编到源程序结束为止,此时以第一个ORG指令指定的地址为程序开始执行的地址.
说明: 在BASM中,所有的指令及伪指令不分大小写,其它的均分大小写
============================================================================================================
附:
在6502Simulator汇编中 伪指令前必须加点. 例如: .ORG .DB .DW
equ 相当于 .set 或 .=
并且增加了许多的伪指令:
.ASCII .ASCIS .BYTE .DB .DBYTE .DCB .DD .DS .DW
.ELSE .END .ENDIF .ENDM .ENDR .ERROR .EXITM .IF .INCLUDE
.IO_WND .MACRO .OPT .ORG .REPEAT .REPT .ROM_AREA .RS .SET
.START .STR .STRING .WORD
- 6502汇编语言程序设计(2版)之宏汇编语言
- 《汇编语言程序设计》
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计
- 汇编语言程序设计读书笔记(2)
- 操作系统之汇编语言(2)
- Intel 汇编语言程序设计 (第五版)
- Intel汇编语言程序设计(第四版) 勘误
- Windows汇编语言程序设计同步练习(2)
- 汇编语言程序设计词汇表
- 汇编语言程序设计学习交流
- 汇编语言程序设计读书笔记
- 三章 汇编语言程序设计
- Ubuntu的source.list
- wpf中通过dbml生成数据库(sdf)
- 汇编指令
- linux下sh执行 syntax error near unexpected token ' 错误解决
- QT的元类型和QT线程通信的方法
- 6502汇编语言程序设计(2版)之宏汇编语言
- OpenSolaris新特性解析
- JavaScript与c#后台代码的相互调用
- 也曾这样的。。。寂寞
- 利用JQGrid动态删除多行数据,行号(即删除/增加数据)变化的问题
- 读写Ini文件
- 增删改Xml文件
- java线程安全总结
- 太高兴了,总算成功了。