一种汇编查表程序
作者在开发‘带拼读的语音示教仪’时,遇到了这样一个要求:根据3个自变量(声母的键值、韵母的键值、四声键的键值)确定一个函数值(根据这三者拼出的读音的代号),其中自变量的值,函数的值都是已知的,但它们之间没有明确的对应关系,另外要求判断自变量是否有对应的函数值,一般常规的查表法不能使用,经过一番研究,作者自编了一个查表程序,解决了这个问题。
一、查表要求:
输入变量:1)声母的键值,2)韵母的键值,3)四声键的键值(在47-50间变化)。
输出结果:对应的读音的代号。
查表要求:根据输入判断是否有对应值,如有,则输出对应代号,如没有,则给出没有找到的标记。
二、查表程序:
;***************************************
;双拼拼读处理
;入口:2EH和2DH中分别存入拼读的声母和韵母,2CH中存放拼读的四声键值,
;出口:找到则返回声音信号的序号值50H中,且06H置1
;如未找到,则06H清'0'
;R6作拼读总数计数器
;************************************************
J_XH2:
PUSH PSW
MOV R6,#0
MOV DPTR,#J_X2
J2_LP0:
INC R6
CLR A
MOVC A,@A+DPTR
CJNE A,2EH,J2_NOTEQH ;取声母,比较,不等则转
INC DPTR
MOVC A,@A+DPTR
CJNE A,2DH,J2_NOTEQL ;若声母等,则韵母,不等转
MOV A,2CH
SUBB A,#47 ;减去47(基数,使键值从'0'开始,0到3)
MOV R7,A ;R7作四声键值记数器
J2_LOOP:
CJNE R7,#0,J2_LOOP1 ;R7中的值不为0,则转去循环
AJMP J2_DONE
J2_LOOP1:
INC DPTR
DEC R7
AJMP J2_LOOP
J2_DONE: ;取数
INC DPTR
CLR A
评论