歡迎您光臨本站 登入註冊首頁

一種查表程序

admin @ 2014-03-14 , reply:0

概述

作者在開發‘帶拼讀的語音示教儀’時,遇到了這樣一個要求:根據3個自變數(聲母的鍵值、韻母的鍵值、四聲鍵的鍵值)確定一個函數值(根據這三者拼出的讀音的代號),其中自變數的值,函數……

作者在開發‘帶拼讀的語音示教儀’時,遇到了這樣一個要求:根據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

MOVC A,@A+DPTR

MOV50H,A;存數

SETB06H

AJMP J2_RET

J2_NOTEQH:

INC DPTR

J2_NOTEQL:

INC DPTR

INC DPTR

INC DPTR

INC DPTR

CJNE R6,#SPZS,J2_LP0;不等於雙拼總數,則繼續循環

CLR06H

J2_RET:

POP PSW

RET

J_X2:DB1826100101102103;zi

DB1926104105106107;ci

DB2026108109110111;si

.

.

.

三、說明

使用本程序前,必須確切地知道表中共有多少個數據,並將定義一個常量:SPZS,即在程序的頭部作如下定義(設表中共有100個數據):

SPZS EQU100

根據這個程序,不難得到三拼的查表程序。以上程序已通過驗證,證明運行無誤。

這是我很早以前作的工作,請各位莫要見笑。

[admin via 研發互助社區 ] 一種查表程序已經有1934次圍觀

http://cocdig.com/docs/show-post-564.html