什么是散转Word格式文档下载.doc

上传人:b****2 文档编号:14176339 上传时间:2022-10-19 格式:DOC 页数:7 大小:37.50KB
下载 相关 举报
什么是散转Word格式文档下载.doc_第1页
第1页 / 共7页
什么是散转Word格式文档下载.doc_第2页
第2页 / 共7页
什么是散转Word格式文档下载.doc_第3页
第3页 / 共7页
什么是散转Word格式文档下载.doc_第4页
第4页 / 共7页
什么是散转Word格式文档下载.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

什么是散转Word格式文档下载.doc

《什么是散转Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《什么是散转Word格式文档下载.doc(7页珍藏版)》请在冰豆网上搜索。

什么是散转Word格式文档下载.doc

  DPTR的另一个作用是变址寻址,访问程序存储器,做查表指令:

如:

  以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址

  movca,@a+dptr;

(a)<

-----((a)+(dptr))

7.4.2散转程序

散转程序是分支程序的一种,使用指令JMP@A+DPTR,可实现多分支转移。

它是根据某种输入或运算的结果,分别转向各个处理程序段取执行程序。

下面以根据R2的内容转向各处理程序为例介绍几种散转程序的设计方法。

(1)转移指令表法(在2KB范围内转移)

把转移指令AJMP(或LJMP)顺序写入转移表。

根据累加器A中的分支序号,通过JMP指令转向表中的某一条JMP指令,然后再执行AJMP指令,把程序转移到指定的分支入口。

这种分支方法实际上是通过两次转移实现的。

例:

根据R2的内容,转向各个处理程序。

1)题目分析

(R2)=0,转向PRG0

(R2)=1,转向PRG1

……

(R2)=255,转向PRG255

2)参考程序

MOVDPTR,#TAB;

转移表首地址

MOVA,R2;

输入分支序号

ADDA,R2;

乘2与转移指令双字节相对应

JNCNADD;

(R2)×

2≤255跳到NADD

INCDPH;

2>

255处理地址表高8位

NADD:

JMP@A+DPTR;

散转至地址表

TAB:

AJMPPRG0

AJMPPRG1

AJMPPRG255

3)程序说明

这个程序由于使用了AJMP指令,因此所有的处理程序入口PRG0、PRG1、…、PRG255和散转表TAB都必须在同一2KB范围内。

如果一个2KB内放不下所有处理程序,可以把一些较长的处理程序放在其他地方,而在2KB内用LJMP指令转向这些处理程序。

如上例PRG1放于2KB内的某地址处,而其实际的处理程序入口为WPRG1,可用如下指令实现:

PRG1:

LJMPWPRG1

这个散转程序使用的AJMP指令为2字节指令,所以存于R2的分支序号需要乘以2才能保证正确地实现散转。

若使用3字节的LJMP指令,存于R2的分支序号需要乘以3。

如果(R2)乘以3大于255,则需要修改DPTR的高8位,程序如下:

MOVDPTR,#TAB

MOVA,R2

MOVB,#3

MULAB

XCHA,B;

3的高8位存在A中

ADDA,DPH;

3的高8位加到DPH上

MOVDPH,A

3的低8位在A中

JMP@A+DPTR

LJMPPRG0

LJMPPRG1

LJMPPRG255

(2)地址偏移表法(在256B范围内转移)

如果转向的程序均在同一页(256B),可以使用地址偏移表来实现转移。

案R2的内容转向4个处理程序。

(R2)=0、1、2、3,分别转向PRG0、PRG1、PRG2、PRG3。

该方法利用指令JMP@A+DPTR与伪指令DB汇编时的计算功能实现散转,例如当(R2)=0时,执行MOVCA,@A+DPTR后,A中为PRG0~TAB,执行JMP@A+DPTR时,(A)+(DPTR)=PRG0-TAB+TAB=PRG0,故转向PRG0.

使用这种方法,转移表的大小加上各个程序长度必须小于256B,转移表和各处处理程序可以位于程序存储器的任何地方。

MOVDPTR,#TAB;

转移地址表表首

MOVCA+@A+DPTR

DBPRG0-TAB;

转移程序与转移地址首表的偏移量

DBPRG3-TAB

PRG0:

处理程序0

PRG3:

处理程序3

(3)转向地址表法(64KB范围内转移)

当转向范围较大时,可以直接使用转向地址表的方法,它的各项表格为各个转向程序的入口。

散转时,使用查表指令,按某个单元的内容查表,找到对应的转向地址,把它装入DPTR中。

然后将累加器A清0,再利用JMP@A+DPTR指令直接转向相应的处理程序。

根据(R2)转向各个处理程序

参考程序:

ADDA,R2;

A←(R2)×

2

JNCNADD

INCDPH

MOVR3,A;

暂存

MOVCA,@A+DPTR

XCHA,R3;

转移地址高8位

INCA

MOVDPL,A;

转移地址低8位

MOVDPH,R3

CLRA

DWPRG0

DWPRG1

DWPRGn

用这种方法可以实现64KB范围内的转移,但散转数n≤255。

如果n>

255则应采用双字节加法运算来修改DPTR。

根据n(n>

256)转向相应的处理子程序,n放在(R2、R3)中,各子程序入口地址放于双字节表格中。

CLRC

MOVA,R3

RLCA

MOVR3,A

XCHA,R2

ADDA,DPL

MOVDPL,A

MOVA,DPH

ADDCA,R2

MOVR2,A

INCDPTR

MOVDPH,R2

(4)通过堆栈操作实现多分支程序转移

分支入口程序地址放在表TAB中,表TAB为16位地址。

根据分支程序序号,使用查表指令,实现多分支程序的转移。

根据(R2)转向n个处理程序(n≤255)

MOVSP,#60H;

设堆栈指针

分支程序入口地址表首地址

RLA;

分支序号×

MOVR1,A;

暂存A

INCA;

先查地址低8位

MOVCA,@A+DPTR;

取地址低8位

PUSHACC;

地址低9位压桟

MOVA,R1;

恢复A

MOVCA,@A+DPTR;

取地址高8位

PUSHACC;

地址高8位压桟

RET;

利用RET指令把PRGn弹给PC

DWPRGn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1