<>:必选,[]:可选
;____________________________________________________________
目录:
.BYTE .DB .ASCII
.MACRO .ENDM .EXITM
.ASCIS
.DBYTE .DD
.DCB
.DW .WORD
.IF .ELSE .ENDIF
.END
.REPEAT .REPT .ENDR
.ERROR
.INCLUDE
.OPT
.ORG
.SET .=
.START
.STR .STRING
;____________________________________________________________
.BYTE, .DB, .ASCII 伪指令 - 用传递的参数定义单字节值
语法:
[<标签>[:]] .db <表达式>, "文本表达式" [, <表达式>[, "文本表达式"]]
[<标签>[:]] .byte <表达式>, "文本表达式" [, <表达式>[, "文本表达式"]]
[<标签>[:]] .ascii <表达式>, "文本表达式" [, <表达式>[, "文本表达式"]]
示例:
alpha: .db "ABC",0 ;生成字节:'A','B','C',0
beta: .db %1,%1$ ;宏参数, 字符串长度和字符串本身
.byte <[aplha-1],>[alpha-1]
.ascii "Text"
描述:
这些指令生成并定义单字节值. 可以以数字或字符串形式输入数据.
;____________________________________________________________
.MACRO .ENDM .EXITM 伪指令 - 宏定义,结束,退出
语法:
<标签>[:] .macro [参数1 [, 参数2 [, ...]]]
.endm
.exitm
示例:
PushX .macro ;无参宏
Print .macro ;接受任意个参数的宏
Put .macro chr ;明确接受一个参数的宏
描述:
.MACRO 指令定义了一块宏定义代码. 放在 .macro 前面的
标签为宏定义名, 并且也被放在宏字典中.
.MACRO 后面放置宏参数或省略号(...). 参数名可以用在宏
定义块中. 定义的参数会在后来源代码使用时被请求. 要传递任意个数
的参数(包括没有), 你可以使用省略号. 没有指令宏参数的宏仅可以通
过宏名调用(不能指定参数).
要在宏中引用宏参数, 你可以:
1) 使用参数名
2) '%' 打头的连续的数字(从 1 开始)
%0 有特别的用途:它指示了宏被调用时实参的个数. 用方括号括起来的
表达式也表示一个数, 比如 %[.cnt+1].
宏被调用时, 参数写在宏名字的后面. 参数之间由逗号分隔.
所有这些表达式都是汇编时(Assembly Time)表达式. 宏得到的是被
重解释/计算 过的结果值.
所有以 '.' 开始的标签只在宏定义块内有效, 无效于外部.
所有其它标签都是全局的. 宏定义代码可以使用局部标
签(从它被调用的地方) \ 全局标签 \ 它自己的局部标签.
宏定义参数也可以 "??" 后缀引用. 如果参数是字符串,
可以通过 '$' 后缀来访问. 不带 '$' 将得到的是该字符串的长度.
参数 0$ 有特别的意义:宏名.
示例:
Put: .macro chr ;打印单个字符
lda #chr ;取得参数 chr 的值
jsr sys_put_char
.endm
;调用:Put 'A'
Print: .macro ... ;打印输出
.cnt .= 0 ;参数计数器
.repeat %0 ;循环 $0 次, 用于每个参数
.cnt .= .cnt + 1
.if .paramtype(%.cnt) == 2 ;文本参数吗?
jsr sys_print_text ;字符串放在调用过程之后
.byte .strlen(%.cnt),%.cnt
.else ;数字化的参数, 即字串的地址
lda #>%.cnt ;高字节地址
ldx #<%.cnt ;低字节地址
jsr sys_print
.endif
.endr
.endm
;____________________________________________________________
.ASCIS 伪指令 - 用字符串参数定义单字节值. 最后一字节的最高有效位被异或以标识字符串结束
语法:
[<标签>[:]] .ascis <表达式> "文本表达式" [, <表达式>, "文本表达式"]
示例:
alpha: .ascis "ABC" ;生成了字节:$41,$42,$C3
beta: .ascis "Stop",$D ;生成了字节:'S','t','o','p',$8D
描述:
.ascis 指令对生成最高有效位被异或的字符串是很有帮助的. 子函数
可以以此来检测字符串是否结束.
;____________________________________________________________
.DBYTE .DD 伪指令 - 定义字长值该数按大头(big-endian)方式转换. 高字节在前, 低字节随后.
语法:
[<标签>[:]] .dd 表达式 [, 表达式 [, ...]]
[<标签>[:]] .dbyte 表达式 [, 表达式 [, ...]]
示例:
alpha: .dd $1234,0 ;生成序列:$12,$34,$0,$0
beta: .dbyte alpha
.dbyte alpah-1,beta
;____________________________________________________________
.DCB 伪指令 - 用给定的值预留并初始化内存
语法:
[<标签>[:]] .dcb 字节数 [, 初值]
示例:
buf: .dcb $20,$FF ;从这里开始的连续 $20 字节被初始化为 $FF.
描述:
该指令保留并用值初始化内存(如果给定).
;__________________________________________________________
.DW .WORD 伪指令 - 定义16位字长值. 小头方式保存:低位在前, 高位在后
语法:
[<标签>[:]] .dw 表达式 [, 表达式 [, ...]]
[<标签>[:]] .word 表达式 [, 表达式 [, ...]]
示例:
alpha: .dw $1234,$0 ;生成序列:$34,$12,$00,$00
beta: .word alpha
.word alpha-1,beta
;________________________________________________________
.IF .ELSE .ENDIF 伪指令 - 条件汇编
语法:
.if 表达式
.else
.endif
示例:
.if .ref(alpha) ;如果 'alpha' 标签被引用过
.if a==5 ;如果标签 a 等于 5
.if b ;如果标签 b 非零
.if %0>2 ; 如果宏有不止两个参数
.if b
rts
.else
...
.endif
;________________________________________________________
.END 伪指令 - 指示完成代码汇编
语法:
[<标签>[:]] .end
示例:
finish: .end ;以下的代码将不再汇编
;________________________________________________________
.REPEAT .REPT .ENDR 伪指令- 循环指定次数执行代码
语法:
[<标签>[:]] .repeat 表达式
.endr
示例:
.repeat 10 ;循环10次
.repeat $0 ;循环宏参数次
.repeat 4
lsr
.endr
;________________________________________________________
.ERROR 伪指令 - 生成用户汇编错误指示
语法:
.error "文本"
示例:
.error "宏"+%0$+"需要参数
;________________________________________________________
.INCLUDE 伪指令 - 包含汇编源代码
语法:
.include 文件名
示例:
.include "c:\asm6502\const_vals.65s"
.include ".\macros\macros"
描述:
该指令包含给定的源代码, 预定的宏或标签
;________________________________________________________
.OPT 伪指令 - 设置汇编选项
可用选项:
Proc6502,Proc65c02,Proc6501 -> 处理器
CaseSensitive,CaseInsensitive -> 大小写敏感
语法:
.opt 选项名, [, 选项名]
示例:
.opt Proc65c02,CaseInsensitive
;________________________________________________________
.ORG 伪指令 - 设定代码生成位置
语法:
[<标签>[:]] .org 表达式
示例:
* = $1000 ;代码位置:$1000
buf:.org * + $10;偏移 * 10字节
描述:
该指令用于设置程序开始地址
;________________________________________________________
.SET .= 伪指令 - 重置表达式的值
语法:
[<标签>[:]] .set 表达式
示例:
.cnt .set .cnt+1 ; .cnt 自增
;________________________________________________________
.START 伪指令 - 设置仿真入口地址
语法:
.start 表达式
示例:
.start start
.start $8000
;________________________________________________________
.STR .STRING 伪指令 - 定义字节值. 第一个值为字符串长度. 最大 255
语法:
[<标签>[:]] .str 表达式 [, 表达式 [, ... ]]
[<标签>[:]] .string 表达式 [, 表达式 [, ... ]]
示例:
alpha: .str "ABC",$0D ;生成 $04,'A','B','C',$0D
;________________________________________________________
女孩不哭(QQ:191035066) @ 2012-08-27 01:01:57 @ http://www.cnblogs.com/nbsofer
---EOF---