<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();