• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 廣告流水燈匯編程序

    廣告流水燈匯編程序

    作者: 時間:2012-09-08 來源:網絡 收藏
    _____________________________________________________功能:程序時間: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偽指令來實現規定程序的起始地址。如果不用ORG規定則匯編得到的目標程序將從0000H開始。例如:

    ORG 2000H
    START:MOV A,#00H

    其實:ORG 00H這條指令的作用是定位初始地址,這里只是一個規定,沒有其它含義。如上邊的兩條代碼,規定了起始地址,那么得到的目標程序將不會從默認的00H開始,而是從定義的2000H處執行。至于第二條指令,MOV P2,#80H這條指令完全沒有用,可以刪去。

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

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

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

    RLC A ;累加器帶進位位循環左移
    RRC A ;累加器帶進位位循環右移

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

    JMP $  ;原地不動,即一直保持,無條件轉移
    END ;結束, 這里不用也沒有關系


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



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 镇巴县| 陆河县| 武功县| 丰顺县| 房山区| 上蔡县| 平凉市| 旺苍县| 舟山市| 遂昌县| 上饶县| 论坛| 新竹市| 囊谦县| 鄂尔多斯市| 县级市| 保靖县| 凉城县| 金门县| 新沂市| 玉龙| 青岛市| 仁寿县| 龙江县| 平度市| 岳阳市| 临城县| 图们市| 于田县| 平江县| 南平市| 体育| 岳阳县| 潜江市| 自治县| 炎陵县| 平原县| 天全县| 抚顺市| 邓州市| 临武县|