广告流水灯汇编程序
_____________________________________________________功能:广告流水灯程序时间: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 $来说,就是原地不动,一直保持。
- 基于DSP的汇编程序优化(01-10)
- 基于数字信号处理器的汇编程序优化方案(03-24)
- ARM汇编程序设计之:汇编语言文件格式(08-30)
- T0作定时器汇编程序(查询法)(12-02)
- DS1302时钟汇编程序数码管显示时间(12-02)
- 一个avr单片机的汇编程序,注意几个宏指令(12-02)