一种汇编查表程序

发布者:legend9最新更新时间:2012-10-12 来源: 21ic 关键字:汇编查表程序  语音示教  自变量 手机看文章 扫描二维码
随时随地手机看文章

作者在开发‘带拼读的语音示教仪’时,遇到了这样一个要求:根据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[page]

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:

POP PSW

RET

J_X2: DB 18 26 100 101 102 103 ;zi

DB 19 26 104 105 106 107 ;ci

DB 20 26 108 109 110 111 ;si

.
.
.

三、说明

使用本程序前,必须确切地知道表中共有多少个数据,并将定义一个常量:SPZS,即在程序的头部作如下定义(设表中共有100个数据):

SPZS EQU 100

根据这个程序,不难得到三拼的查表程序。以上程序已通过验证,证明运行无误。

这是我很早以前作的工作,请各位莫要见笑。

关键字:汇编查表程序  语音示教  自变量 引用地址:一种汇编查表程序

上一篇:单片机和 FIFO 的接口汇编程序
下一篇:基于单片机的电子琴的电路设计

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved