廣告流水燈匯編程序
_____________________________________________________功能:廣告流水燈程序時(shí)間:2010—9—13注釋:指令MOV P2,#80H是一條廢指令,不起作用,可刪除_____________________________________________________ ORG 00HMOV P2,#80HSTART:MOV A,#0FFH ;賦初值CLR CMOV R2,#8LOOP:RRC A ; 帶進(jìn)位右移MOV P1,ACALL DELAYDJNZ R2,LOOPMOV R2,#7LOOP1:RLC A ; 帶進(jìn)位左移MOV P1,ACALL DELAYDJNZ R2,LOOP1JMP STARTDELAY:MOV R3,#20 ; 延時(shí)0.2秒D1: MOV R4,#20D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETEND
ORG是Origin的縮寫:起始地址源。在匯編語言源程序的開始通常都用一條ORG偽指令來實(shí)現(xiàn)規(guī)定程序的起始地址。如果不用ORG規(guī)定則匯編得到的目標(biāo)程序?qū)?000H開始。例如:
ORG 2000H 其實(shí):ORG 00H這條指令的作用是定位初始地址,這里只是一個(gè)規(guī)定,沒有其它含義。如上邊的兩條代碼,規(guī)定了起始地址,那么得到的目標(biāo)程序?qū)⒉粫?huì)從默認(rèn)的00H開始,而是從定義的2000H處執(zhí)行。至于第二條指令,MOV P2,#80H這條指令完全沒有用,可以刪去。 CLR C是CF置零,相當(dāng)于STAB CF的反操作,目的是將進(jìn)位位置零. DJNZ指令有兩種格式:DJNZ Rn,rel和DJNZ direct,rel,其實(shí)它的功能不止這些,本程序中使用到的只是一個(gè)標(biāo)號(hào),也就是工作寄存器組Rn非零則轉(zhuǎn)移到標(biāo)號(hào)標(biāo)示的位置執(zhí)行程序,為零則順序進(jìn)行下一條指令的執(zhí)行。 DJNZ Rn,rel 寄存器減1,非零轉(zhuǎn)移 RLC A ;累加器帶進(jìn)位位循環(huán)左移 上邊的兩條移位指令是帶進(jìn)位的移位指令,注意和匯編語言程序設(shè)計(jì)中的SHR、SHL、SAR、SAL進(jìn)行比對(duì),它相當(dāng)于是SAR和SAL,也就是算術(shù)移位指令,因?yàn)闃?biāo)志寄存器CF始終參與移位。其實(shí),匯編語言程序中存在一個(gè)循環(huán)移位指令,用到這里效率會(huì)更高。 JMP $ ;原地不動(dòng),即一直保持,無條件轉(zhuǎn)移
START:MOV A,#00H
DJNZ direct,rel 直接地址單元減1,非零轉(zhuǎn)移
RRC A ;累加器帶進(jìn)位位循環(huán)右移
END ;匯編程序結(jié)束, 這里不用也沒有關(guān)系
另外對(duì)于DJNZ Rn,$來說,也不難理解。Rn內(nèi)容遞減,而$不變,即所謂原地跳轉(zhuǎn),但這是有條件轉(zhuǎn)移指令,對(duì)于無條件轉(zhuǎn)移指令JMP $來說,就是原地不動(dòng),一直保持。
評(píng)論