单词记忆测试器程序的设计说明Word文档下载推荐.docx
《单词记忆测试器程序的设计说明Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单词记忆测试器程序的设计说明Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
pushbx
pushcx
pushdx
pushsi
pushdi
leadx,b9;
输出不认识的单词
movah,09h
leadx,b6
popdi
popsi
popdx
popcx
popbx
popax
ret
zi4endp
操作说明:
一、输入单词:
;
1、提示输入单词,输入最少5个、最多255个英文单词,每个单词不超过20个字符。
2、若直接回车,则结束单词输入,进入单词测试;
3、输足20个字符,自动进入下一个单词的输入;
4、不足20个字符个字符,按回车键进入下一个单词的输入。
二、单词记忆测试:
1、从输入的第一个单词开始测试2、键入'
y'
(不分大小写)或'
n'
,回答是否认识,不需按回车键确认,其它按键无效;
3、紧接着,没有提示,可按上移键或下移键循环测试;
4、按Esc键结束测试。
三、计算单词识别率并显示输出;
四、提示是否进行下一组单词的输入和测试,键入'
选择是否继续,不需按回车键确认,其它按键无效。
本程序在MASMPlus1.2集成环境下通过编译,经过调试,运行正确。
CodeSegment
AssumeCS:
Code,DS:
Code
-------------------------------------
功能:
显示指定地址(Str_Addr)的字符串
入口:
Str_Addr=字符串地址(要求在数据段)
用法:
OutputStr_Addr用法举例:
OutputPromptStr)
OutputMACROStr_Addr
leadx,Str_Addr
movah,9
EndM
输出一个字符
dl=要显示的字符
Output_ChrprocNear
pushax
movah,02h
int21h
popax
ret
Output_Chrendp
输出回车换行
Output_CTLFprocNear
movdl,0dh
Output_CTLFendp
把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
AX=二进制数
出口:
在当前光标位置显示转换后的ASCII码数字
Dec_ASCIIProcNear
pushdx
pushbx
movbx,10
leadi,@@Temp_Save[6]
movBYTEptr[di],'
decdi
@@Divide:
xordx,dx
divbx
ordl,30h
mov[di],dl
testax,0ffffh
jnz@@Divide
incdi
pushdi
popdx
movah,9
popdi
popbx
@@Temp_Savedb7dup(?
Dec_ASCIIEndP
键盘输入一个字符,若输入的是'
或'
(不分大小写),则显示并返回
无
若输入的是'
,进位标志置位;
,进位标志复位。
Yes_or_NoprocNear
@@Input_Chr:
movah,7;
不带回显的键盘输入
movdl,al
andal,0dfh
cmpal,'
Y'
jnz$+5
stc
jmp$+7
N'
jnz@@Input_Chr
clc
movah,2
Yes_or_NoEndp
Input_WordsProcNear;
输入一组单词
xorcl,cl;
输入的单词数目初值
leabx,Buffer;
数据缓冲区地址
movdi,bx
OutputPrompt_Str1;
提示输入单词
@@Input_Words:
cmpcl,255
jz@@Termanate;
限定最多255个单词
mov[bx.Recognise],No;
初始化识别标志
mov[bx.previous],di;
前一个节点地址
mov[bx.Next],Chrs+1;
每个单词最多字符数
leadx,[bx.Next];
键盘输入缓冲区地址
movah,0ah;
输入单词
movsi,dx
incsi
lodsb;
读入实际输入的字符个数,即单词长度
testal,al;
直接回车?
是,结束单词输入
inccl;
累计输入的单词数目
xorah,ah
addsi,ax
mov[si],'
;
使之能用dos功能调用9号功能显示这个字符串(单词)
mov[bx.Next],si;
下一个节点地址
movbx,si
callOutput_CTLF;
输出一个回车、换行
jmp@@Input_Words;
输入下一个单词
@@Termanate:
cmpcl,5
jb@@Input_Words;
限定最少5个单词
movWords,cl;
保存单词数目
leasi,Buffer;
movbx,[bx.previous]
mov[si.previous],bx;
把第一个节点的前一个节点地址指向最后一个节点
把最后一个节点的下一个节点地址指向第一个节点,形成循环链表
callOutput_CTLF
Input_WordsEndP
Test_WordsProcNear
leadx,[si.Next][2]
OutputPrompt_Str2;
要求回答是否认识这个词汇,回答字母不分大小写
@@Recognise:
or[si.Recognise],Yes
callYes_or_No
jc@@Up_Down
and[si.Recognise],No
@@Up_Down:
int16h
cmpah,KBEsc
jnz$+3
cmpah,KBUp
jnz@@Next_KBDown
movsi,[si.previous]
jmpTest_Words
@@Next_KBDown:
cmpah,KBDown
jnz@@Up_Down
movsi,[si.Next]
Test_WordsEndP
Statics_WordsProcNear;
计算单词识别率
movcl,Words;
取单词数
xorch,ch
movbx,[si.Next]
xorax,ax
@@L0:
addal,[si.Recognise];
累加识别率
loop@@L0
movbl,100
mulbl
divWords
OutputPrompt_Str3;
提示显示单词识别率
callDec_ASCII;
movdl,'
%'
callOutput_Chr;
显示输出一个字符
Statics_WordsEndP
Chrsequ20;
单词最多字符数
Yesequ1;
认识
Noequ0;
不认识
KBEscequ1;
Esc键扫描码
KBUpequ48H;
↑键扫描码
KBDownequ50H;
↓键扫描码
定义结构类型
Words_TableStruc;
单词链表
Recognisedb?
识别标志(是否认识这个单词)
previousdw?
Nextdw?
Words_TableEndS
Prompt_Str1db'
Pleaseinputwords:
'
13,10,'
“请输入单词”提示信息
Prompt_Str2db'
doyouknowit?
(y/n):
“是否认识单词”提示信息
Prompt_Str3db7,13,10,13,10,'
youranswerrateis:
$'
“单词识别率”提示信息
Prompt_Str4db7,13,10,13,10,'
Doyouwanttotestagain(y/n)?