RSS

浅谈一种查表程序

来源: 作者: 时间:2007-06-29 Tag: 点击:

作者在开发‘带拼读的语音示教仪’时,遇到了这样一个要求:根据3个自变量(声母的键值、韵母的键值、四声键的键值)确定一个函数值(根据这三者拼出的读音的代号),其中自变量的值,函数的值都是已知的,但它们之间没有明确的对应关系,另外要求判断自变量是否有对应的函数值,一般常规的查表法不能使用,经过一番研究,作者自编了一个查表程序,解决了这个问题。

一、查表要求:

输入变量:1)声母的键值,2)韵母的键值,3)四声键的键值(在47-50间变化)。

输出结果:对应的读音的代号。

查表要求:根据输入判断是否有对应值,如有,则输出对应代号,如没有,则给出没有找到的标记。

二、查表程序:

;**********************************************************************

;双拼拼读处理

;入口:2EH2DH中分别存入拼读的声母和韵母,2CH中存放拼读的四声键值,

;出口:找到则返回声音信号的序号值50H,06H1

;如未找到,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'开始,03)

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

MOVC A,@A+DPTR

MOV 50H,A ;存数

SETB 06H

AJMP J2_RET

J2_NOTEQH:

INC DPTR

J2_NOTEQL:

INC DPTR

INC DPTR

INC DPTR

INC DPTR

CJNE R6,#SPZS,J2_LP0 ;不等于双拼总数,则继续循环

CLR 06H

J2_RET:


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册