资源描述:
《凌阳应用程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、4应用程序设计文章来源:凌阳科技大学计划作者:凌阳科技大学计划发布时间:2005-6-714:03:351查表程序 查表,就是在以为关系建立的表格中,根据变量,查找值。由于SPCE061A具有寄存器间接寻址和变址寻址方式,所以查表的基本方法有如下两种:方法一:寄存器间接寻址方式Rn=表首地址Rn+=偏移地址Rd=[Rn]//取得表中的数据方法二:变址寻址方式BP=表首地址Rn=[BP+偏移地址]//取得表中的数据 方法二要比前一种方法来得更简洁些,但是方法二中的偏移地址只能是6位的立即数。就是说,方法二查表范围限制在64word以内。这一点在使用时,需要提醒读者注
2、意。 由于SPCE061A有32kwordFlash的程序存储区,所以仅有零页的程序存储区(每页的存储区为64kword),不涉及到程序区寻址的段选的内容。方法一和方法二,仅仅适用于表放在零页的程序存储区的情形1.1一维数组查表程序程序4-16查8位十六进制数平方表//=========================================================================//函数:F_Square()//语法:voidF_Square(void)//描述:查0~0xFF的平方表。//参数:R1=待查的数,低8位有效。(仅仅查0
3、~0xFF的平方值)//返回:R1=查表后的平方值结果//=========================================================================F_Square:.PROCR1&=0x00FF;//屏蔽高8位,仅使低8位有效R1+=Square_Table;//计算元素地址R1=[R1];//取得数据RETF;.ENDP.CODESquare_Table://0~255平方表.DW0,1,4,9,16//0~4平方表.DW25,36,49,64,81//5~10平方表....DW62500,63001,63504
4、,64009,64516//250~255平方表1.2二维数组查表程序程序4-17二维数组查表//=========================================================================//函数:F_Get_Array()//语法:voidF_Get_Array(void)//描述:实现查表//参数:R1=元素下标I(矩阵行号),R2=元素下标j(矩阵列号)//返回:R1=查找到的元素,R2=查找成功标志(1为查找成功,2为行号溢出,3为列号溢出)//================================
5、=========================================F_Get_Array:.procR3=[Array_Table];//取矩阵行数CMPR3,R1;//比较行是否出界JBE?row;//如果出界,则跳到行溢出处理R4=[Array_Table+1];//取矩阵列数CMPR4,R2//比较列是否出界JBE?colum;//如果出界,则跳到列溢出处理MR=R1*R4;R2=R2+R3;//计算元素地址的偏移量R2+=Array_Table+2;//计算元素地址的绝对地址R1=[R2];//取元素值R2=1;//成功标示RETF;?row:R2
6、=2;//行溢出标志RETF;?colum:R2=3;//列溢出标志RETF;.ENDP.CODEArray_Table:.DW3,5//定义矩阵行数为3,列数为5.DW1,2,3,4,5//矩阵0行.DW6,7,8,9,10//矩阵1行.DW11,12,13,14,15//矩阵2行.ENDP1.3查表散转程序 在程序4-18介绍了一种散转程序的方法,这里我们通过查表的方法来实现散转。这两种方法尽管从形式上是不同的,但他们的实现机理是相同的:通过改变PC寄存器的值来实现的。 这里,根据某个寄存器的内容为0,1,2,……,分别转向处理程序0,1,2,……。把转向的地
7、址组成一个表,通过查表的方式决定程序的跳转。其流程图见图4.27。程序4-18查表散转程序//=========================================================================//函数:F_Swich()//语法:voidF_Swich(void)//描述:实现查表//参数:R1=要转向的子程序的序号//返回:无//=========================================================================F_