这个汇编程序是什么意思?

这个是80C51的一个多分支程序,但我看不懂到底是干什么的(虽然已经有题目)谁能一条一条帮俺分析一下,感激不尽啊。设R7的内容为0~N,对应的处理程序的入口地址分别为PP... 这个是80C51的一个多分支程序,但我看不懂到底是干什么的(虽然已经有题目)谁能一条一条帮俺分析一下,感激不尽啊。

设R7的内容为0~N,对应的处理程序的入口地址分别为PP0~PPN。程序段如下:
START:MOV DPTR,#TAB ;置分支入口地址表首址
MOV A,R7 ;分支转移序号送A
ADD A,R7 ;分支转移序号乘以2
MOV R3,A ;暂存于R3
MOVC A,@A+DPTR ;取高位地址
XCH A,R3
INC A
MOVC A,@A+DPTR ;取低位地址
MOV DPL,A ;处理程序入口地址低8位送DPL
MOV DPH,R3 ;处理程序入口地址高8位送DPL
CLR A
JMP @A+DPTR
TAB:DW PP0
DW PP1
… … …
DW PPN
看来是我天生愚笨了,我还是看不懂一楼的回答,因为我根本就不知道什么DPTR,DPL本质到底是什么,也不知道为什么INC A 就转到低8位地址,还有@A+DPTR到底是干什么,整个的本质我都弄混淆了。
展开
 我来答
健康ARTREAL
2009-10-29 · TA获得超过896个赞
知道答主
回答量:119
采纳率:0%
帮助的人:53.4万
展开全部
我来回答
把分数给我
行吧?

START:MOV DPTR,#TAB
这句就是把 TAB:DW PP0 这一行的地址移到16位寄存器DPTR里

MOV A,R7 ;把R7内容移到累加器A里

ADD A,R7 ;把累加器A里的数加上R7里的数,A里面的先前的数是R7,
所以就是R7+R7,就是两倍R7,把加好之后的数(2R7)再存入A里

MOV R3,A ;把A里面的数(2R7)移到R3里
MOVC A,@A+DPTR ;A+DPTR = TAB:DW PP0这一行的地址+2R7
如果R7=0,那么A+DPTR = TAB:DW PP0 这一行的地址=PP0的地址,
如果R7=1,那么A+DPTR = TAB:DW PP0 这一行的地址+2=PP0+2=PP1的地址,

如果R7=2,那么A+DPTR = TAB:DW PP0 这一行的地址+4=PP0+4=PP2的地址,
................................。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
。。。。。。。。
。。。。。。以此类推
下面说下下面入口的地址问题
DW PP0
DW PP1
… … …
DW PPN

DW PP0表示定义一个字,一个字是16位,51单片机每8位一个字节
一个字等于两个字节
一个字节一个地址
PP0是一个字,两个字节,也就是说PP0的地址是占两个内存单元
我现在把PP0换成3456H
那么假设TAB:的内存地址是8000H
那么(8000H)=34H
(8001H)=56H

假设PP0换成11H
那么(8000H)=00H
(8001H)=11H

所以 PP0
PP1
PP2
..
PPN
的地址是要乘以2的

下面

XCH A,R3 ;把R3(2R7)与A交换里面的值,那么A=2R7,R3=PPN的高8位地址

INC A ;就是A+1,所以A里面的值就是2R7+1

MOVC A,@A+DPTR ;取低位地址,假设R7里面的值等于N, A+DPTR =2R7+1+PP0高位地址=PP0高位地址+2N+1=PPN的高位地址+1=PPN的地位位地址,在把这个地位地址送给A

MOV DPL,A ;把地址低8位送DPL
MOV DPH,R3 ;地址高8位送DPH,因为前面不是说过R3与A交换值,R3=2R7+PP0的高8位地址=2N+PP0的高8位地址=PPN的高8位地址
CLR A ;A清零
JMP @A+DPTR ;跳转到PPN的程序入口,A+DPTR =DPTR=PPN的高8位和低8位地址即16位地址,因为DPTR是16位专门寄存器

完毕
希望对得起我的劳动啊
选我为答案
要是我这么说你还不懂
我就不知道怎么说了
再见
做而论道
高能答主

2009-10-25 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
题目要求:已知R7的内容为“0~N”之一,现在要根据R7的内容,转移到程序“PP0~PPN”其中的一个。

转移的方法是利用“JMP @A+DPTR”指令,执行该指令之前,要把程序的地址(即PP0~PPN其中的一个)送到DPTR,并清零A。

程序的地址,用DW伪指令存好,每个地址,有两个字节,字节总共有2倍R7的内容,称为地址表。

下面的程序,主要就是从地址表中,找出两个字节,送到DPTR。

程序段如下:
START:
MOV DPTR,#TAB ;置分支入口地址表首址
MOV A, R7 ;分支转移序号送A
ADD A, R7 ;乘以2,因为表长度2倍于R7
MOV R3,A ;R7*2暂存于R3
MOVC A, @A+DPTR ;取地址的高8位
XCH A, R3 ;高位存到R3,换回R7*2
INC A ;转到低8位地址
MOVC A, @A+DPTR ;取
MOV DPL,A ;低8位送DPL
MOV DPH,R3 ;高8位送DPL
CLR A
JMP @A+DPTR ;根据入口地址转移

TAB: ;处理程序的入口地址PP0~PPN。
DW PP0
DW PP1
… … …
DW PPN
-------------------
呵呵,基本指令尚不明确,就研究程序,有点操之过急。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式