[求助]下面汇编程序每一句怎么解释,那些数字是哪儿来的

haihua1121 2009-07-09 04:26:04
用查表方法编写彩灯控制程序,编程使彩灯先顺次点亮,再逆次点亮,然后连闪三下,反复循环。
程序为:
ORG 0000H
START: MOV R0,#00H
LOOP: CLR A
MOV A,R0
ADD A,#0CH
MOVC A,@A+PC
CJNE A,#03H,LOOP1
JMP START
LOOP1: MOV P1,A
ACALL DEL
INC R0
JMP LOOP
TAB: DB 01H,02H,04H,08H,10H,20H,40H,80H
DB 80H,40H,20H,10H,08H,04H,02H,01H
DB 00H,0FFH,00H,0FFH,00H,0FFH,03H
DEL: MOV R7,#0FFH
DEL1: MOV R6,#0FFH
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END


请各位帮忙,上面程序的每一句的数字是怎么算出来的?
...全文
107 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tumen 2009-07-20
  • 打赏
  • 举报
回复
我设计的话,一个大循环套三个小循环,没这么精简清晰。
haihua1121 2009-07-16
  • 打赏
  • 举报
回复
谢谢楼主!
skyler2008 2009-07-15
  • 打赏
  • 举报
回复
ORG 0000H

START:
MOV R0,#00H ====>初始化Table偏移量

LOOP:
CLR A
MOV A,R0 =======>Load Table 偏移量
ADD A,#0CH ======>0cH: MOVC A,@A+PC 到 TAB的偏移量
MOVC A,@A+PC =====>读取Tab中第R0个数到A
CJNE A,#03H,LOOP1 ===>判断是否是表结束码,是则跳转到START重新开始;不是则把数据送到IO Port1
JMP START
LOOP1:
MOV P1,A
ACALL DEL ===>延时
INC R0 ===>Table偏移量+1
JMP LOOP
TAB: DB 01H,02H,04H,08H,10H,20H,40H,80H
DB 80H,40H,20H,10H,08H,04H,02H,01H
DB 00H,0FFH,00H,0FFH,00H,0FFH,03H
DEL: MOV R7,#0FFH
DEL1: MOV R6,#0FFH
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
haoren556699 2009-07-12
  • 打赏
  • 举报
回复
学习 借鉴
schlafenhamster 2009-07-12
  • 打赏
  • 举报
回复
你把lst文件打开看看:
0000 94 org 0000h
0000 95 start:
0000 7800 96 mov r0,#00h
0002 E4 97 loop: clr a
0003 E8 98 mov a,r0
0004 240C 99 add a,#0ch
0006 83 100 movc a,@a+pc
0007 B40302 101 cjne a,#03h,loop1
000A 80F4 102 jmp start
000C 103 loop1:
000C F590 104 mov p1,a
000E 112A 105 acall del
0010 08 106 inc r0
0011 80EF 107 jmp loop
108
0013 01020408 109 tab: db 01h,02h,04h,08h,10h,20h,40h,80h
0017 10204080
001B 80402010 110 db 80h,40h,20h,10h,08h,04h,02h,01h
001F 08040201
0023 00FF00FF 111 db 00h,0ffh,00h,0ffh,00h,0ffh,03h
0027 00FF03
002A 7FFF 112 del: mov r7,#0ffh
002C 7EFF 113 del1: mov r6,#0ffh
002E DEFE 114 del2: djnz r6,del2
0030 DFFA 115 djnz r7,del1
0032 22 116 ret
yashuwa0622 2009-07-12
  • 打赏
  • 举报
回复
0CH 是指令 MOVC A,@A+PC 和 TAB 之间 PC所需的偏移量 ,是根据它们之间其他指令所占用的机器周期计算出来的
etracer 2009-07-10
  • 打赏
  • 举报
回复
学习
haihua1121 2009-07-10
  • 打赏
  • 举报
回复
ADD A,#0CH 中的0CH怎么算出来的?
jyicai 2009-07-09
  • 打赏
  • 举报
回复
1,MOVC A,@A+PC ,pc指向下条语句的地址,这个地址加上0Ch,就是TAB的地址。这时只要变R0就对表可以查找
2,CJNE A,#03H,LOOP1 ,循环3次后,跳到loop1



21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧