新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 廣告流水燈匯編程序

        廣告流水燈匯編程序

        作者: 時間:2012-09-08 來源:網(wǎng)絡(luò) 收藏
        _____________________________________________________功能:程序時間:2010—9—13注釋:指令MOV P2,#80H是一條廢指令,不起作用,可刪除_____________________________________________________ ORG 00HMOV P2,#80HSTART:MOV A,#0FFH    ;賦初值CLR CMOV R2,#8LOOP:RRC A           ; 帶進位右移MOV P1,ACALL DELAYDJNZ R2,LOOPMOV R2,#7LOOP1:RLC A          ;  帶進位左移MOV P1,ACALL DELAYDJNZ R2,LOOP1JMP STARTDELAY:MOV R3,#20     ;   延時0.2秒D1:   MOV R4,#20D2:   MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND

        ORG是Origin的縮寫:起始。在匯編語言源程序的開始通常都用一條ORG偽指令來實現(xiàn)規(guī)定程序的起始地址。如果不用ORG規(guī)定則匯編得到的目標程序?qū)?000H開始。例如:

        ORG 2000H
        START:MOV A,#00H

        其實:ORG 00H這條指令的作用是定位初始地址,這里只是一個規(guī)定,沒有其它含義。如上邊的兩條代碼,規(guī)定了起始地址,那么得到的目標程序?qū)⒉粫哪J的00H開始,而是從定義的2000H處執(zhí)行。至于第二條指令,MOV P2,#80H這條指令完全沒有用,可以刪去。

        CLR C是CF置零,相當于STAB CF的反操作,目的是將進位位置零.

        DJNZ指令有兩種格式:DJNZ Rn,rel和DJNZ direct,rel,其實它的功能不止這些,本程序中使用到的只是一個標號,也就是工作寄存器組Rn非零則轉(zhuǎn)移到標號標示的位置執(zhí)行程序,為零則順序進行下一條指令的執(zhí)行。

        DJNZ Rn,rel 寄存器減1,非零轉(zhuǎn)移
        DJNZ direct,rel 直接地址單元減1,非零轉(zhuǎn)移

        RLC A ;累加器帶進位位循環(huán)左移
        RRC A ;累加器帶進位位循環(huán)右移

        上邊的兩條移位指令是帶進位的移位指令,注意和匯編語言程序設(shè)計中的SHR、SHL、SAR、SAL進行比對,它相當于是SAR和SAL,也就是算術(shù)移位指令,因為標志寄存器CF始終參與移位。其實,匯編語言程序中存在一個循環(huán)移位指令,用到這里效率會更高。

        JMP $  ;原地不動,即一直保持,無條件轉(zhuǎn)移
        END ;結(jié)束, 這里不用也沒有關(guān)系


        另外對于DJNZ Rn,$來說,也不難理解。Rn內(nèi)容遞減,而$不變,即所謂原地跳轉(zhuǎn),但這是有條件轉(zhuǎn)移指令,對于無條件轉(zhuǎn)移指令JMP $來說,就是原地不動,一直保持。



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 靖边县| 蓬溪县| 博野县| 丽水市| 湟中县| 仙桃市| 山丹县| 大安市| 德庆县| 岗巴县| 道真| 漠河县| 大英县| 长兴县| 韶山市| 利川市| 樟树市| 磐安县| 满洲里市| 潮安县| 中山市| 如皋市| 建昌县| 馆陶县| 东乌| 宁南县| 齐齐哈尔市| 浦东新区| 黎城县| 会泽县| 双辽市| 邛崃市| 鸡东县| 吴川市| 奎屯市| 阿克苏市| 交口县| 文成县| 黎川县| 沈丘县| 万宁市|