新聞中心

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

6502單片機(jī)編程--偽指令2

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


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

評論


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

關(guān)閉