飞思卡尔查表和散转:查表是汇编程序设计的一个重要技术,巧妙地运用查表可以避免复杂的编程,如立方表、函数表、数码管的显示段码等。散转就是按照输入数据的不同转移到不同程序的过程。查表运算与转移指令配合使用,就可以方便地实现散转功能。实现散转的具体做法是,在程序中定义一块连续存储单元作为跳转表,表中顺序存放各分支子程序的跳转地址。各跳转地址在表中偏移的起始地址等于跳转表首地址加上它们各自的序号与所占字节数的乘积。
[例题4]
设单字节变量NUM放在RAM l拘0060H单元,取值范围为0~9,编写一个程序,实现求出该变量立方值的功能。
分析:此时可以用查表方式来实现,在RAM中设置一个立方表 因为7的立方已经超过一个字节的存储大小,所以,每个立方值用2个字节单元来存储。变量NUM对应的立方值
的存储地址ADD_n与立方表的首地址TAB的关系为:Add_n=TAB+NUM×2.
程序如下:
ORG$()060
NUM RMB l ;为变量保留l B单元
ANS RMB 2 ;为结果存储保留28单元
ORG$0070
TAB:FDB$oo00、$0001 1$0008、$001 8、$0040、$007D、$00DB、$0157、$0200、$02D9
SUBPR0:LDX NUM
LSLX
LDA TAB,X
STA ANS
LDA TAB+1,X
STA ANS+l
RTS
[例题5]
设单字节变量NUM的取值为0~3,其值分别对应子程PR00~PR03,编写程序,实现根据NUM变量的值跳转到对应的子程序的功能。
分析:由于TAB表中JSR为3 8指令,RTS为l B指令,所以变量NUM、散转表TAB地址、相应变量对应的子程的跳转入口地址Add—PR0—n之间的关系为:Add—PR0—n=TAB+
NUM×4 0
程序如下:
BRA:LDX NUM
LDA #$04
MUL
TAX
JMP TAB,X
TAB:JSR PR00
RTS
JSR PR0l
RTS
JSR PR02
RTS
JSR PR03
RTS
PR00: …
RTS
PR01: …
RTS
PR02: …
RTS
PR03: …
RTS
更多精彩请您关注: