6502汇编语言程序设计(2版)之宏汇编语言

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

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值