用汇编语言设计单词记忆测试器程序设计

用汇编语言设计单词记忆测试器程序设计,第1张

题目名称:单词记忆测试

题目来源:http://zhidao.baidu.com/question/127688555.html

*** 作说明:

一、输入单词:

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

2、若直接回车,则结束单词输入,进入单词测试;

3、输足20个字符,自动进入下一个单词的输入;

4、不足20个字符个字符,按回车键进入下一个单词的输入。

二、单词记忆测试:

1、从输入的第一个单词开始测试

2、键入'y'(不分大小写)或'n',回答是否认识,不需按回车键确认,其它按键无效;

3、紧接着,没有提示,可按上移键或下移键循环测试;

4、按Esc键结束测试。

三、计算单词识别率并显示输出

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

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

Code Segment

Assume CS:Code,DS:Code

-------------------------------------

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

入口:

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

用法: Output Str_Addr

用法举例:Output PromptStr

Output MACRO Str_Addr

push ax

lea dx,Str_Addr

mov ah,9

int 21h

pop ax

EndM

-------------------------------------

功能:输出一个字符

入口:dl=要显示的字符

Output_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

Output_Chr endp

-------------------------------------

功能:输出回车换行

Output_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF endp

-------------------------------------

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

入口:AX=二进制数

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

Dec_ASCII Proc Near

push dx

push bx

push di

mov bx,10

lea di,@@Temp_Save[6]

mov BYTE ptr [di],'$'

dec di

@@Divide: xor dx,dx

div bx

or dl,30h

mov [di],dl

dec di

test ax,0ffffh

jnz @@Divide

inc di

push di

pop dx

mov ah,9

int 21h

pop di

pop bx

pop dx

ret

@@Temp_Save db 7 dup(?)

Dec_ASCII EndP

-------------------------------------

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

入口:无

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

Yes_or_No proc Near

push dx

push ax

@@Input_Chr: mov ah,7 不带回显的键盘输入

int 21h

mov dl,al

and al,0dfh

cmp al,'Y'

jnz $+5

stc

jmp $+7

cmp al,'N'

jnz @@Input_Chr

clc

mov ah,2

int 21h

pop ax

pop dx

ret

Yes_or_No Endp

-------------------------------------

Input_Words Proc Near 输入一组单词

xor cl,cl 输入的单词数目初值

lea bx,Buffer 数据缓冲区地址

mov di,bx

Output Prompt_Str1 提示输入单词

@@Input_Words: cmp cl,255

jz @@Termanate 限定最多255个单词

mov [bx.Recognise],No 初始化识别标志

mov [bx.previous],di 前一个节点地址

mov [bx.Next],Chrs+1 每个单词最多字符数

mov di,bx

lea dx,[bx.Next] 键盘输入缓冲区地址

mov ah,0ah 输入单词

int 21h

mov si,dx

inc si

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

test al,al 直接回车?

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

inc cl 累计输入的单词数目

xor ah,ah

add si,ax

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

inc si

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

mov bx,si

call Output_CTLF 输出一个回车、换行

jmp @@Input_Words 输入下一个单词

@@Termanate: cmp cl,5

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

mov Words,cl 保存单词数目

lea si,Buffer 数据缓冲区地址

mov bx,[bx.previous]

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

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

call Output_CTLF

ret

Input_Words EndP

-------------------------------------

Test_Words Proc Near

call Output_CTLF

call Output_CTLF

lea dx,[si.Next][2]

mov ah,9

int 21h

call Output_CTLF

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

@@Recognise: or [si.Recognise],Yes

call Yes_or_No

jc @@Up_Down

and [si.Recognise],No

@@Up_Down: xor ah,ah

int 16h

cmp ah,KBEsc

jnz $+3

ret

cmp ah,KBUp

jnz @@Next_KBDown

mov si,[si.previous]

jmp Test_Words

@@Next_KBDown: cmp ah,KBDown

jnz @@Up_Down

mov si,[si.Next]

jmp Test_Words

Test_Words EndP

-------------------------------------

Statics_Words Proc Near 计算单词识别率

mov cl,Words 取单词数

xor ch,ch

lea si,Buffer 数据缓冲区地址

mov bx,[si.Next]

xor ax,ax

@@L0: add al,[si.Recognise] 累加识别率

mov si,[si.Next]

loop @@L0

mov bl,100

mul bl

div Words

Output Prompt_Str3 提示显示单词识别率

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

mov dl,'%'

call Output_Chr 显示输出一个字符

ret

Statics_Words EndP

-------------------------------------

Chrs equ 20 单词最多字符数

Yesequ 1 认识

No equ 0 不认识

KBEscequ 1 Esc键扫描码

KBUp equ 48H ↑键扫描码

KBDown equ 50H ↓键扫描码

-------------------------------------

定义结构类型

Words_Table Struc 单词链表

Recognise db ? 识别标志(是否认识这个单词)

previous dw ? 前一个节点地址

Next dw ? 下一个节点地址

Words_Table EndS

-------------------------------------

Prompt_Str1 db 'Please input words:',13,10,'$' “请输入单词”提示信息

Prompt_Str2 db 'do you know it ?(y/n):$' “是否认识单词”提示信息

Prompt_Str3 db 7,13,10,13,10,'your answer rate is: $' “单词识别率”提示信息

Prompt_Str4 db 7,13,10,13,10,'Do you want to test again(y/n)?$' “测试下一组单词?”提示信息

Words db 0 实际输入的单词数目

Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$' *** 作完成按任意键结束程序提示信息

Start:push cs

pop ds

push cs

pop es 使数据段、附加段与代码段同段

@@InputWord: call Input_Words 输入一组单词

call Test_Words 测试识别率

call Statics_Words 计算单词识别率

Output Prompt_Str4 再测试一组单词?

call Yes_or_No

call Output_CTLF

call Output_CTLF

jc @@InputWord

-------------------------------------

Exit_Proc: Output Press_Key 提示 *** 作完成,按任意键结束程序

mov ah,1

int 21h

mov ah,4ch 结束程序

int 21h

Buffer: 数据缓冲区

Code ENDS

END Start 编译到此结束

要记住单词、数字、人名,这都属于长期记忆中的陈述性记忆中的语义记忆,人记忆就是在大脑中不断的 编织 一张网,要想记住新的东西就需要把新的东西和大脑中已有的知识连接起来,编到这张网中。接下来,我跟你分享的普通心理学的 记忆原理 。

记忆主要分三个部分:感觉记忆、工作记忆和长期记忆。感觉记忆的时间最短只有1/4秒,存储的内容有12~16项工作记忆又被称为短期记忆,保存时间稍长一点,约20~30秒,存储内容最少,只有5~8项长期记忆的存储时间和存储容量都是无限的,所以不要为了节约存储空间而故意不去记忆一些东西啊。

普通心理学的记忆原理: 感觉记忆

你可以快速看一眼这个阵列,然后看看能回忆起多少个字母来

D J B W

X H G N

C L Y K

实验中,实验者斯柏林首先让志愿者说出他们所能记得阿的所有字母,不出意料,大多数人在那么短的时间只能记住3~4个字母。但是,斯柏林推测远比这三四个字母有多的信息进入了暂时的记忆缓存之中,为了检验这种可能性,他对实验进行了改动,当这个字母阵列在屏幕上出现并消失之后,实验人员立刻播放一个声音提示,告诉被试将要 报告 哪一行的字母:高音调表示报告最上面一行 的字母,中音调表示报告中间一行的字母,低音调表示报告最下面一行的字母。所以,当被试者看到字母阵列和听到声音提示之后,他们被要求报告的仅仅是一行字母,在只要对字母阵列的局部进行报告的情况下,大多数人几乎能完全正确的报告被要求报告的那一行。

也就是说,感觉记忆记住了所有的这12个字母,但是转换成工作记忆的只有3~4个字母。

普通心理学的记忆原理: 工作记忆

工作记忆能记住7项左右的内容,同样是一个《普通心理学》上的实验:

请快速看一眼第一行的数字,不要努力记忆,瞥一眼就行了,然后把视线挪开,并尝试着回忆这一行的数字,如果你记对了,那么请试试下一行更长的数字,你的短期记忆能记住的最长的那行数字有几位数?测试结果就是你的记忆长度。

7 4 8 5

3 6 2 1 8

4 7 9 1 0 3

2 3 8 4 9 7 1

3 6 8 9 1 7 5 6

7 4 7 2 1 0 3 2 4

8 2 3 0 1 3 8 4 7 6

大多数能够记住5~7位数字,如果你能记住更多位,那么你可能使用了“组块”和“复述”的技巧。

组块

组块其实就是把一个内容分块来记,比如我们的普通电话号码有7~8位数字,但是再加上区号就有10多位了,超出了我们工作记忆的记忆能力,如果让我们记住一个10位长的乱起八糟的数肯定是记不住的,但是我们把区号分成一块,再把电话号码分成几块,就比较容易能够记住了。

复述

说到电话号码,我们在记电话号码的时候,心里会不断重复的念这段数字,以防止被遗忘,这其实就是用到了复述。不信,我们的工作记忆是20~30秒,那么如果你保持30秒不去想它,并且你没有使用前面提到的组块,那么30秒过后,基本上就记不住了。

普通心理学的记忆原理: 长期记忆

长期记忆分为程序性记忆和陈述性记忆。程序性记忆主要记录一些如何去做的信息,比如一道题怎么解,如何去d奏一篇乐曲。陈述性记忆又分为情景记忆和语义记忆,情景记忆主要记录个人经历,还储存事件发生的时间和地点等信息,当有人问你,“你 除夕 夜在哪里过?”的时候,你就会在情景记忆里面搜寻答案。语义记忆主要存储词语和概念之类的信息,比如人名、面容、语法、历史、音乐、礼节、科学原理和宗教信仰,当有人问你“谁是第三任美国总统”的时候,你就会到语义记忆中搜寻答案。

长期记忆的语义记忆还与生理上的海马体和杏仁核有关,工作记忆里与语义记忆相关的信息先存储在海马体,然后经过巩固才会从海马体里面转移成长期记忆。一个悲剧性的人物H.M的悲惨经历说明了这一点,他因为手术切除了海马体,可悲的是从此他不能记住做手术之后的任何事情,但是能正确的回忆起手术之前的事情,并且他能够学习怎么去做之类的事情,你可以教他怎么去折一个纸飞机。

与记忆形成相关的生理结构还有神经元和突触以及一些化学物质,情绪激动时可以加强记忆就与这相关,比如我们更容易清晰的记住失恋时的场景。

运用心理学原理记忆单词一、五分钟记忆法

不少学习者喜欢在一段很长时间里无规律连续反复背诵若干单词,其实,这种对大脑皮层的长时间单调刺激有两点不足:一是引起心理上疲劳二是记忆材料之间产生较大的干扰,这两点,都会影响到记忆效果。记单词最好是每次三五分钟,一天十几次地重复记忆若干单词,这样效果好且时间经济。学生可充分利用饭前饭后、等车散步、闲聊小憩等余闲时间零敲碎打地记忆单词。

运用心理学原理记忆单词二、间隔记忆法

间隔学习的准则是:一刻休息等于两刻死记硬背,换言之,在你记诵了一次生词之后,停顿一会,再背第二次。每次停顿都让生词更深渗透进你的记忆仓库,促使大脑利用回忆现象,产生更佳效果。实验证明,间隔记忆比一个劲儿不歇的“集中记忆”有更大优越性。

运用心理学原理记忆单词三、睡眠记忆法

心理学实验表明:人在睡眠状态下,由于大脑不受外界任何刺激,记忆将保持原有状态。因此,人从睡眠状态醒来时,进入睡眠状态前的记忆几乎不会有下降,而在同一时间内你若不去睡眠,则记忆内容会消失将近一半。因此,对于生词学习或旧词复习的工作,可安排在睡前进行。若有时间,在使用之前再复习一次。通过把记忆过程适当分隔,使整个过程同睡眠时间相协调,单词记忆效果将明显加强。

运用心理学原理记忆单词四、五步相连法

识记单词时,每个单词需经过“看清、熟读、释义、书写、再现”五个连环动作完成,步骤间紧密相连。

第一步,先要看清、看准所记单词形象,给大脑输送清晰、准确信号。

第二步要熟读。立即连续诵读(或默念、拼读)所要记忆的单词,诵读次数一般为2至3遍,用时3到5秒。

第三步释义。立即诵读和理解所需记忆的单词,诵读次数2到3遍,用时10秒左右。

第四步书写。把所要记忆的单词连写3遍,边写边念,边想意思,用时15到20秒。

第五步再现,即回想。眼晴离开所要记忆的单词,将前四步所记形音义回忆默背一遍,使其在大脑中形成一完整概念。如回忆不清,立即重复一遍,重建印象。用时3到5秒。

以上五步连环,可使所要记忆的单词多个因素(形音义写法等)在25到45秒左右建立起鲜明独立的初识印象。

运用心理学原理记忆单词五、循环记忆法

利用心理学只有合理组织信息和整理、复习才能达到牢固记忆之目的的原理,将若干单词分成小组进行初学加复习,两两相进,循环记忆。初学或复习,需经过“读一遍、看一眼、想一下”三环节。此法记忆效率可达每小时70至100个,它能借助音标正确朗读单词、了解分类及各类词基本语法特征,最适于迅速扩大理解性词汇量。

点击进入>>>精英特记忆训练软件免费下载

​记忆原理相关 文章 :

1. 心理学中的记忆与学习的关系

2. 大脑记忆的原理

3. 记忆的原理

4. 大脑记忆的20种方法

5. 艾宾浩斯记忆曲线原理

 


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11830420.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存