新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 6502單片機編程--偽指令2

6502單片機編程--偽指令2

作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
**宏指令**
令我感到極度興奮的是 6502_Macroassembler &Simulator有強大的宏功能.這無疑使程序
的編寫又簡單方便許多了.
我們先說說宏的格式
宏名:.MACRO 宏虛參數(shù)1,宏虛參數(shù)2,宏虛參數(shù)3.....
宏體
.ENDM
這里.MACRO.ENDM必須成對出現(xiàn)
宏調(diào)用的格式:
宏名宏實參數(shù)1,宏實參數(shù)2,宏參數(shù)3
具有宏調(diào)用的源程序被編譯時,每個宏調(diào)用將被編譯程序展開,宏展開實際上是宏定義時設(shè)計的宏體去代替相應(yīng)的宏指令名,并且用實際參數(shù)去取代虛參數(shù),以形成符合功能并可以被執(zhí)行的實際代碼
我們舉例說明:
實現(xiàn)中斷指令 INT
大家知道,現(xiàn)在的6502編譯器都不支持INT指令,給書寫造成不便,不過現(xiàn)在我們可以用宏來實現(xiàn)
.ORG $0000
INT:.MACRO INT_PARAM
.DB $00
.DW INT_PARAM
.ENDM
說明,這里 INT 是宏名,注意后面要接 : ,INT_PARAM 是虛參數(shù),由于INT的機器碼是 00,所以我們在宏體中 .DB $00,比如 INT $C008,機器碼是 00 08 C0,所以我們 .DW INT_PARAM.這樣,我們實現(xiàn) INT 指令,例如我們在程序里輸入 INT $C008,就和文曲星里的 INT $C008是一樣的功能.
我再舉個例子,6502中沒有寄存器X直接入堆棧和彈出堆棧功能的指令,這里我們用宏實現(xiàn)
.ORG $0000
PHX:.MACRO
TXA
PHA
.ENDM
PLX:.MACRO
PLA
TAX
.ENDM
MAIN:PHX
...
PLX
RTS
看到了吧,我們在程序中就可以用 PHX,PLX
雖然宏的功能比較大,但是我們不可以亂用,因為宏和子程序是不一樣的,子程序由 JSR 調(diào)用,RTS 返回,所以匯編后子程序的機器碼只占有一個程序段,不管調(diào)用多少次都是如此,比較節(jié)省內(nèi)存.宏指令每調(diào)用一次都要占一個程序段,調(diào)用次數(shù)越多,占用內(nèi)存就越多,所以從開銷來說,子程序優(yōu)于宏指令,但從程序的執(zhí)行時間來分析,每調(diào)用一次子程序都要保護(hù)和恢復(fù)返回地址,要消耗一些時間宏指令調(diào)用不需要這個過程,執(zhí)行時間較短,所以從執(zhí)行時間來看,宏指令又優(yōu)于子程序.
所以說,當(dāng)某一需要多次訪問的程序段較長,訪問次數(shù)又不是太多時,選用子程序比較好;當(dāng)某一需要多次訪問程序段較短,訪問次數(shù)又很頻繁時,選用宏指令比較好.


關(guān)鍵詞: 6502單片機編程偽指

評論


技術(shù)專區(qū)

關(guān)閉