单词记忆测试器程序设计.docx

上传人:b****8 文档编号:10108346 上传时间:2023-02-08 格式:DOCX 页数:28 大小:22.27KB
下载 相关 举报
单词记忆测试器程序设计.docx_第1页
第1页 / 共28页
单词记忆测试器程序设计.docx_第2页
第2页 / 共28页
单词记忆测试器程序设计.docx_第3页
第3页 / 共28页
单词记忆测试器程序设计.docx_第4页
第4页 / 共28页
单词记忆测试器程序设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

单词记忆测试器程序设计.docx

《单词记忆测试器程序设计.docx》由会员分享,可在线阅读,更多相关《单词记忆测试器程序设计.docx(28页珍藏版)》请在冰豆网上搜索。

单词记忆测试器程序设计.docx

单词记忆测试器程序设计

b6db1000hdup('$')

b9db'Youdonotknowthefollowingwords,pleaserememberthemagian',0ah,0dh,'$'

f1db'verygood,congratulationstoyou',0ah,0dh,'$'

callzi4;输出不认识的单词

movah,02h;回车换行

movdl,0dh

int21h

movah,02h

movdl,0ah

int21h

callzi2;将不认识的单词存到B6所指单元

callzi2;将不认识的单词存到B6所指单元

m2:

incdi

leasi,b6;将不认识的单词放到B6所指单元111111*********111111

movsi,z;保留SI的地址

zi4proc

pushax

pushbx

pushcx

pushdx

pushsi

pushdi

leadx,b9;输出不认识的单词

movah,09h

int21h

leadx,b6

movah,09h

int21h

popdi

popsi

popdx

popcx

popbx

popax

ret

zi4endp

操作说明:

一、输入单词:

;1、提示输入单词,输入最少5个、最多255个英文单词,每个单词不超过20个字符。

2、若直接回车,则结束单词输入,进入单词测试;3、输足20个字符,自动进入下一个单词的输入;4、不足20个字符个字符,按回车键进入下一个单词的输入。

;二、单词记忆测试:

1、从输入的第一个单词开始测试2、键入'y'(不分大小写)或'n',回答是否认识,不需按回车键确认,其它按键无效;3、紧接着,没有提示,可按上移键或下移键循环测试;4、按Esc键结束测试。

三、计算单词识别率并显示输出;四、提示是否进行下一组单词的输入和测试,键入'y'(不分大小写)或'n'选择是否继续,不需按回车键确认,其它按键无效。

本程序在MASMPlus1.2集成环境下通过编译,经过调试,运行正确。

CodeSegment

AssumeCS:

Code,DS:

Code

;-------------------------------------

;功能:

显示指定地址(Str_Addr)的字符串

;入口:

Str_Addr=字符串地址(要求在数据段)

;用法:

OutputStr_Addr用法举例:

OutputPromptStr)

OutputMACROStr_Addr

pushax

leadx,Str_Addr

movah,9

int21h

popax

EndM

;-------------------------------------

;功能:

输出一个字符

;入口:

dl=要显示的字符

Output_ChrprocNear

pushax

movah,02h

int21h

popax

ret

Output_Chrendp

;-------------------------------------

;功能:

输出回车换行

Output_CTLFprocNear

pushax

pushdx

movah,02h

movdl,0dh

int21h

movdl,0ah

int21h

popdx

popax

ret

Output_CTLFendp

;-------------------------------------

;功能:

把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示

;入口:

AX=二进制数

;出口:

在当前光标位置显示转换后的ASCII码数字

Dec_ASCIIProcNear

pushdx

pushbx

pushdi

movbx,10

leadi,@@Temp_Save[6]

movBYTEptr[di],'$'

decdi

@@Divide:

xordx,dx

divbx

ordl,30h

mov[di],dl

decdi

testax,0ffffh

jnz@@Divide

incdi

pushdi

popdx

movah,9

int21h

popdi

popbx

popdx

ret

@@Temp_Savedb7dup(?

Dec_ASCIIEndP

;-------------------------------------

;功能:

键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回

;入口:

;出口:

若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。

Yes_or_NoprocNear

pushdx

pushax

@@Input_Chr:

movah,7;不带回显的键盘输入

int21h

movdl,al

andal,0dfh

cmpal,'Y'

jnz$+5

stc

jmp$+7

cmpal,'N'

jnz@@Input_Chr

clc

movah,2

int21h

popax

popdx

ret

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;每个单词最多字符数

movdi,bx

leadx,[bx.Next];键盘输入缓冲区地址

movah,0ah;输入单词

int21h

movsi,dx

incsi

lodsb;读入实际输入的字符个数,即单词长度

testal,al;直接回车?

jz@@Termanate;是,结束单词输入

inccl;累计输入的单词数目

xorah,ah

addsi,ax

mov[si],'$';使之能用dos功能调用9号功能显示这个字符串(单词)

incsi

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;把第一个节点的前一个节点地址指向最后一个节点

mov[bx.Next],si;把最后一个节点的下一个节点地址指向第一个节点,形成循环链表

callOutput_CTLF

ret

Input_WordsEndP

;-------------------------------------

Test_WordsProcNear

callOutput_CTLF

callOutput_CTLF

leadx,[si.Next][2]

movah,9

int21h

callOutput_CTLF

OutputPrompt_Str2;要求回答是否认识这个词汇,回答字母不分大小写

@@Recognise:

or[si.Recognise],Yes

callYes_or_No

jc@@Up_Down

and[si.Recognise],No

@@Up_Down:

xorah,ah

int16h

cmpah,KBEsc

jnz$+3

ret

cmpah,KBUp

jnz@@Next_KBDown

movsi,[si.previous]

jmpTest_Words

@@Next_KBDown:

cmpah,KBDown

jnz@@Up_Down

movsi,[si.Next]

jmpTest_Words

Test_WordsEndP

;-------------------------------------

Statics_WordsProcNear;计算单词识别率

movcl,Words;取单词数

xorch,ch

leasi,Buffer;数据缓冲区地址

movbx,[si.Next]

xorax,ax

@@L0:

addal,[si.Recognise];累加识别率

movsi,[si.Next]

loop@@L0

movbl,100

mulbl

divWords

OutputPrompt_Str3;提示显示单词识别率

callDec_ASCII;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示

movdl,'%'

callOutput_Chr;显示输出一个字符

ret

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)?

$';“测试下一组单词?

”提示信息

Wordsdb0;实际输入的单词数目

Press_Keydb7,13,10,13,10,'Thecomplated.Pressanykeytoexit...$';操作完成按任意键结束程序提示信息

Start:

pushcs

popds

pushcs

popes;使数据段、附加段与代码段同段

@@InputWord:

callInput_Words;输入一组单词

callTest_Words;测试识别率

callStatics_Words;计算单词识别率

OutputPrompt_Str4;再测试一组单词?

callYes_or_No

callOutput_CTLF

callOutput_CTLF

jc@@InputWord

;-------------------------------------

Exit_Proc:

OutputPress_Key;提示操作完成,按任意键结束程序

movah,1

int21h

movah,4ch;结束程序

int21h

Buffer:

;数据缓冲区

CodeENDS

ENDStart;编译到此结束

1. 实现单词的录入(为使程序具有可演示性,单词不少于10个)。

2. 单词根据按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。

3. 单词背完后给出正确率。

CodeSegment

AssumeCS:

Code,DS:

Code

;-------------------------------------

OutputMACROStr_Addr

pushax

leadx,Str_Addr

movah,9

int21h

popax

EndM

;-------------------------------------

Output_ChrprocNear

pushax

movah,02h

int21h

popax

ret

Output_Chrendp

;-------------------------------------

Output_CTLFprocNear

pushax

pushdx

movah,02h

movdl,0dh

int21h

movdl,0ah

int21h

popdx

popax

ret

Output_CTLFendp

;-------------------------------------

;

Dec_ASCIIProcNear

pushdx

pushbx

pushdi

movbx,10

leadi,@@Temp_Save[6]

movBYTEptr[di],'$'

decdi

@@Divide:

xordx,dx

divbx

ordl,30h

mov[di],dl

decdi

testax,0ffffh

jnz@@Divide

incdi

pushdi

popdx

movah,9

int21h

popdi

popbx

popdx

ret

@@Temp_Savedb7dup(?

Dec_ASCIIEndP

;-------------------------------------

;功能:

键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回

;入口:

;出口:

若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。

Yes_or_NoprocNear

pushdx

pushax

@@Input_Chr:

movah,7;不带回显的键盘输入

int21h

movdl,al

andal,0dfh

cmpal,'Y'

jnz$+5

stc

jmp$+7

cmpal,'N'

jnz@@Input_Chr

clc

movah,2

int21h

popax

popdx

ret

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;每个单词最多字符数

movdi,bx

leadx,[bx.Next];键盘输入缓冲区地址

movah,0ah;输入单词

int21h

movsi,dx

incsi

lodsb;读入实际输入的字符个数,即单词长度

testal,al;直接回车?

jz@@Termanate;是,结束单词输入

inccl;累计输入的单词数目

xorah,ah

addsi,ax

mov[si],'$';使之能用dos功能调用9号功能显示这个字符串(单词)

incsi

mov[bx.Next],si;下一个节点地址

movbx,si

callOutput_CTLF;输出一个回车、换行

jmp@@Input_Words;输入下一个单词

@@Termanate:

cmpcl,10

jb@@Input_Words;限定最少5个单词

movWords,cl;保存单词数目

leasi,Buffer;数据缓冲区地址

movbx,[bx.previous]

mov[si.previous],bx;把第一个节点的前一个节点地址指向最后一个节点

mov[bx.Next],si;把最后一个节点的下一个节点地址指向第一个节点,形成循环链表

callOutput_CTLF

ret

Input_WordsEndP

;-------------------------------------

Test_WordsProcNear

callOutput_CTLF

callOutput_CTLF

leadx,[si.Next][2]

movah,9

int21h

callOutput_CTLF

OutputPrompt_Str2;要求回答是否认识这个词汇,回答字母不分大小写

@@Recognise:

or[si.Recognise],Yes

callYes_or_No

jc@@Up_Down

and[si.Recognise],No

@@Up_Down:

xorah,ah

int16h

cmpah,KBEsc

jnz$+3

ret

cmpah,KBUp

jnz@@Next_KBDown

movsi,[si.previous]

jmpTest_Words

@@Next_KBDown:

cmpah,KBDown

jnz@@Up_Down

movsi,[si.Next]

jmpTest_Words

Test_WordsEndP

;-------------------------------------

Statics_WordsProcNear;计算单词识别率

movcl,Words;取单词数

xorch,ch

leasi,Buffer;数据缓冲区地址

movbx,[si.Next]

xorax,ax

@@L0:

addal,[si.Recognise];累加识别率

movsi,[si.Next]

loop@@L0

movbl,100

mulbl

divWords

OutputPrompt_Str3;提示显示单词识别率

callDec_ASCII;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示

movdl,'%'

callOutput_Chr;显示输出一个字符

ret

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)?

$';“测试下一组单词?

”提示信息

Wordsdb0;实际输入的单词数目

Press_Keydb7,13,10,13,10,'Thecomplated.Pressanykeytoexit...$';操作完成按任意键结束程序提示信息

Start:

pushcs

popds

pushcs

popes;使数据段、附加段与代码段同段

@@InputWord:

callInput_Words;输入一组单词

callTest_Words;测试识别率

callStatics_Words;计算单词识别率

OutputPrompt_Str4;再测试一组单词?

callYes_or_No

callOutput_CTLF

callOutput_CTLF

jc@@InputWord

;-------------------------------------

Exit_Proc:

OutputPress_Key;提示操作完成,按任意键结束程序

movah,1

int21h

movah,4ch;结束程序

int21h

Buffer:

;数据缓冲区

Code

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1