6502 通用宏彙編器宏彙編偽指令說明

來源:互聯網
上載者:User

6502 通用彙編器 宏彙編用法
<>:必選,[]:可選
;____________________________________________________________
目錄:
        .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---

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.