汇编语言的堆栈流水灯分析

以下是暗点流动的程序
麻烦再后面注解 每一步是什么意思
ORG 0000H
LJMP START
ORG 30H
START:
MOV SP,#5FH
MOV A,#80H 将A中的初始值改为改成7FH变亮的流动
LOOP:
MOV P1,A
RL A 改变流动的方向将RL A改为RR A
LCALL DELAY
LJMP LOOP
delay:
mov r7,#255
d1: mov r6,#255
d2: nop
nop
nop
nop
djnz r6,d2
djnz r7,d1
ret
END

第1个回答  推荐于2016-11-20
ORG 30H 程序从30h开始
START:
MOV SP,#5FH 堆栈设在5fh,
MOV A,#80H 将A中的初始值改为改成7FH变亮的流动 80h=1000 0000 7fh=0111 1111
LOOP:
MOV P1,A
RL A 改变流动的方向将RL A改为RR A 这里就是不带c的左移或右移 1000 0000 左移一次就是 0000 0001 右移一次就是0100 0000 也就是流水灯的效果了
LCALL DELAY 调用延时子程序 延时一段时间
LJMP LOOP 跳转到 loop处 ,也就是不停的循环

唉!实在是太简单了
下面就是延时子程序了
delay:
mov r7,#255
d1: mov r6,#255
d2: nop
nop
nop
nop
djnz r6,d2
djnz r7,d1
ret
END追问

那延时程序呢?
delay:
mov r7,#255
d1: mov r6,#255
d2: nop
nop
nop
nop
djnz r6,d2
djnz r7,d1
想要增长或缩短时间怎么改
还有为什么要4个连续的nop
小白伤不起吧····

追答

mov r7,#255 r7=255
d1: mov r6,#255 r6=255
d2: nop 空操作,什么也不干,就是浪费一点时间
nop
nop
nop
djnz r6,d2 r6=r6-1看看是不是减到0了,没有的话跳转到d2处继续浪费时间
djnz r7,d1 r6减到0了就来到这里,r7=r7-1,然后看看r7减到0没,没有的话跳转到 d1处,把r6从新赋值255,继续浪费时间,直到r6等于0同时r7也等于0,就返回到调用处的下一条指令处继续执行

本回答被提问者采纳
相似回答