大学英语教材打字练习

大学英语教材

One day a lion lay asleep in the jungle .A tiny mouse ,running about in the grass and not noticing where he was going ,ran over d今天是个寒冷饿一天,手都冻不行咯,,,好冷哦,想穿多点衣服,,手现在打字都不利索咯。。僵硬咯,,怎么办啊,这个寒冷啊好冷啊

,,怎么这样子冷,。,,天啊

离开你我才发现我爱笑的眼睛,我一定让自己让自己决定,这爱的城市。。当一个人看电影。离开你我才发现自己那爱笑的眼睛。我一定让自己很坚定,音乐无处不在、老婆无可取代。说不出来,背诵对白,掩盖无奈、却又为何难以释怀。别在我离开之前离开,永远用来。多想钟摆吗,哪怕再多一秒徘徊,一定笑着说bey-bey。 寂寞涌出来把我掩埋再见

To 1Then you can start to make it better

For by making let me down

句子橘子香水在空气中 蠢蠢欲哭,今夜化了美美的妆,如果再看你一眼,最真实的怀恋也回不到从前】

你给过的温柔,你灰色头像是什么,坠落星空

The young and the old

Someone said to a man ,”travel and see the world .”he an answered,”why should I ?people are the same everywhere.they are bron.they are babies.they are children.they are adults.they grow old.they die.while they are alive,they have the some emotions.they

feel love and hate,happiness and sadnesss,security and fear,pride and shame,comfort and discomfort.that is why I do not want to travel.i can learn everything here,I’m going to stay home

Illustrate genius semester embarrass astonish astonish Publish dumb recipe graduate minus minus latter echo laughter nonsense laundry ancient random manuscriptpackage enclose

Illustration chapter favorite string contract royalty royalty worldwide qualify qualificationdisciplineprocess stink stinkstinkodds

Odds

 

第二篇:打字练习

打字练习

----打字练习

摘 要

微机原理及应用是一门实践性很强的课程;其课程设计目的在于综合运用所学知识,全面掌握微机计算机与DOS方式的工作原理、编程和使用方法;在设计中,通过小组协作提出并论证设计方案,进行软件调试,最后获得正确结果,可以加深和巩固对理论知识的更好掌握,进一步建立计算机应用系统体的概念,初步掌握DOS开发方法,为以后进行实际的软件应用开发奠定良好的基础。

本设计是利用Masm for window集成实验环境来实现得打字练习程序,当前,在计算机和许多手机上流行许多小游戏,小软件,应用都很广泛,比如本次编写的练习打字小程序就很有趣,不仅让我们学习打字,更加重要的是我们在编写的过程中更好的掌握学过的知识,锻炼了我们的编程技能。

通过运用汇编语言中有的循环,子程序调用等来完成程序的编写,并且通过对程序的调试,逐步的掌握汇编语言的功能,在自己不足的方面进行改正,进一步的巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养了对编程的兴趣

关键词 课程设计,软件调试,打字练习,编程

- 1 -

----打字练习

1 设计内容简介

1.1 设计任务

设计主菜单:按回车键进入打字练习;按ESC键进入延缓界面;按空格键暂停;按大写字母“E”程序结束。将两位十进制数从屏幕上方落下,用户要在这个过程中键入落下的字母,在下落的过程中键入落下的数字,如果正确,数字消失;键入不正确,数字继续下落。若键入正确,则得分,没有键入正确,不扣分。在打字的过程中,每下落十个数记一次总成绩。

1.2 设计思想

用汇编语言实现打字程序的思想,首先用BIOS的10H中断类型的02H功能置光标位置,接着用DOS的21H中断类型的09H功能显示字符串来显示主界面;调用DOS的21H的08H功能,接受从键盘输入的字符到AL寄存器,判断AL如果为回车以默认速度开始游戏,如为S键则进入速度选择界面,如为E键则退出程序;进入速度选择界面后,调用DOS的21H的08H功能,选择速度后进入游戏;进入游戏后,随机落下一字母,通过21H的06H功能调用,接受从键盘输入的字符到AL寄存器,如键入ESC进入成绩界面,如键入空格则暂停游戏,如没有得到输入或输入错误则继续下落,输入正确则字母消失,并通过21H的02H功能调用发生响铃;接着继续下落其他字母,如果落下的字母数大于78个则退出游戏进入成绩界面。进入成绩界面后通过DOS的21H的02H功能调用显示击中字母的个数和丢失字母的个数,暂停大概2秒钟后自动回到主界面。

1.3 设备环境

16位Windows 2000操作系统,文本编辑器使用写字板,汇编程序使用MASM.EXE,连接程序使用LINK.EXE,调试程序使用DEBUG.EXE。

1.4 知识点运用

Windows 2000操作系统、写字板、汇编程序等的基本使用规则;调用BIOS的1号功能、2号功能、6号功能、09号功能、10号功能等;汇编语言中,循环语句、判断语句的使用和嵌套;文本的建立,程序链接的方法;绘图和屏幕截图的方法; DEBUG调试程序。

- 2 -

----打字练习

2 程序流程设计

主要流程图

图2.1 打字练习程序流程图

打字练习

- 3 -

----打字练习

3 程序代码设计

Init_game macro op1,op2,op3,op4,op5,op6 mov cx,00h

mov dh,op1

mov dl,op2

op6:mov ah,02h

mov bh,00h

int 10h

push cx

mov ah,0ah

mov al,op3

mov bh,00h

mov cx,01h

int 10h

pop cx

inc cx

inc op4

cmp cx,op5

jne op6

endm

clear_screen macro op1,op2,op3,op4

;本段程序主要是通过定义变量和调用实现清屏宏定义 mov ah,06h

mov al,00h

mov bh,07h

mov ch,op1

mov cl,op2

mov dh,op3

mov dl,op4

int 10h

mov ah,02h

mov bh,00h

mov dh,00h

- 4 -

----打字练习

mov dl,00h

int 10h

endm

menu macro op1,op2,op3

; 本段程序主要是通过定义变量和调用来实现菜单显示宏定义 mov ah,02h

mov bh,00h

mov dh,op1

mov dl,op2

int 10h

mov ah,09h

lea dx,op3

int 21h

endm

data segment

ZK db "WELCOME TO PLAY$"

no db "date:2010-12-31$"

meg db "press Enter key to continue.......$"

meg1 db "when a letter is dropping,please hit it!$"

meg2 db "press space key to pause!$"

meg3 db "press ESC key to return main interface!$"

meg4 db "press letter 'E' to exit!$"

speed dw 600d

letters db "jwmilzoeucgpravskntxhdyqfb"

db "iytpkwnxlsvxrmofzhgaebudjq"

db "nwimzoexrphysfqtvdcgljukda"

letters_bak db "jwmilzoeucgpravskntxhdyqfb"

db "iytpkwnxlsvxrmofzhgaebudjq"

db "nwimzoexrphysfqtvdcgljukda"

letter_counter db 0

life_flag db 78 dup(0)

position_flag db 78 dup(0)

present_position db 1

- 5 -

----打字练习 data ends

;本段主要用于主界面的显示,起到提示作用 stack segment para stack 'stack'

db 64 dup(0)

stack ends

code segment

main proc far

assume cs:code,ds:data,ss:stack start: mov ax,data

mov ds,ax

mov letter_counter,00h mov present_position,1 lea si,position_flag mov ah,00h

mov cx,00h

init_postion_flag:

mov [si],ah

inc si

inc cx

cmp cx,78d

jne init_postion_flag

lea di,letters

lea si,letters_bak

mov cx,00h

init_letters:

mov ah,[si]

mov [di],ah

inc si

inc di

inc cx

cmp cx,78d

jne init_letters

- 6 -

----打字练习

mov ah,00h

lea si,life_flag

mov cx,00h

init_life_flag:

mov [si],ah

inc si

inc cx

cmp cx,78d

jne init_life_flag

mov cx,00h

mov ah,01h

or ch,00010000b

int 10h

clear_screen 00d,00d,24d,79d

Init_game 00d,00d,0ah,dl,80d,nextsign1 Init_game 24d,00d,0ah,dl,80d,nextsign2 Init_game 00d,00d,0ah,dh,25d,nextsign3 Init_game 00d,79d,0ah,dh,25d,nextsign4 menu 05d,15d,ZK

; 本段程序主要是对菜单信息的宏调用

menu 07h,15d,no

menu 09d,15d,meg

menu 11d,15d,meg1

menu 13d,15d,meg2

menu 15d,15d,meg3

menu 17d,15d,meg4

put: mov ah,02h

;此段用来设置光标位置

mov bh,00h

mov dh,22d

mov dl,33d

int 10h

- 7 -

----打字练习

mov ah,01h

;通过本段代码,能够从键盘输入任意字符

int 21h

cmp al,0dh

je speed3

cmp al,45h

je exit

exit: mov ah,4ch

int 21h

speed3: mov ax,speed+12

mov speed,ax

jmp begin

begin: clear_screen 01d,01d,23d,78d

;第二次使用清屏宏调用

clear_screen 01d,01d,23d,78d

Init_game 23d,01d,01h,dl,78d,nextsign5 mov ah,02h

mov bh,00h

mov dh,01h

mov dl,01h

int 10h

mov cx,00h

lea si,letters

nextletter:

mov ah,02h

;用来示字母

mov dl,[si]

int 21h

inc si

inc cx

cmp cx,78d

je nextcycle

- 8 -

----打字练习

jmp extletter

from_front:

sub present_position,78d jmp gobackto_si

find_zero:

cmp letter_counter,78d

je recycle

cmp present_position,78d

je from_one

mov ah,00h

nextsi: add present_position,01h

inc si

cmp [si],ah

je gobackto_di

cmp present_position,78d

je from_one

jmp nextsi

from_one:mov present_position,01h

jmp gobackto_si

recycle:mov letter_counter,00h

mov present_position,01d

lea si,position_flag

mov cx,00h

mov ah,00h

clearsi: mov [si],ah

inc cx

cmp cx,78d

je nextcycle

inc si

jmp clearsi

nextcycle:

lea di,letters

- 9 -

----打字练习

lea si,position_flag

add present_position,31d

cmp present_position,78

ja from_front

gobackto_si:

add si,word ptr present_position dec si

mov ah,[si]

cmp ah,01h

je find_zero

gobackto_di:

mov ah,01h

mov [si],ah

add di,word ptr present_position dec di

mov dl,present_position

mov ah,02h

mov bh,00h

mov dh,01h

int 10h

mov cx,00h

nextrow: push cx

mov cx,00h

out_cycle:

;时间的延迟

push cx

mov cx,00h

in_cycle:

add cx,01h

cmp cx,1000

jne in_cycle

push dx

- 10 -

----打字练习

mov ah,06h

;从键盘输入字符

mov dl,0ffh

int 21h

pop dx

jz pass

cmp al,1bh

;如果键入ESC,则返回主菜单

je to_start1

cmp al," "

;如果键入SPACE,则游戏暂停

je pause

cmp al,[di]

;输入字母正确!则字母消失

je disappear

pass: pop cx

inc cx

cmp cx,speed

je print

jmp out_cycle

pause: push dx

;用来暂停处理

mov ah,06h

mov dl,0ffh

int 21h

pop dx

cmp al," "

jne pause

jmp pass

to_start1:

;用于返回主菜单

jmp start

- 11 -

----打字练习 print:

mov ah,0ah

;在当前光标位置写空格

mov al," "

mov bh,00h

mov cx,01h

int 10h

inc dh

mov ah,02h

;用来改变光标位置

mov bh,00h

int 10h

mov ah,0ah

;在当前光标位置写字母

mov al,[di]

mov bh,00h

mov cx,01h

int 10h

pop cx

inc cx

cmp cx,21d

je print_next_letter

jmp nextrow

;下一行

disappear:

;击中字母后输出空格

pop cx

pop cx

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

- 12 -

----打字练习

int 10h

jmp hit

print_next_letter:

lea si,life_flag

add si,word ptr present_position dec si

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

inc dh

mov ah,02h

mov bh,00h

int 10h

mov ah,0ah

mov al," "

mov bh,00h

mov cx,01h

int 10h

mov ah,1

mov [si],ah

hit: mov ah,02h

mov bh,00h

mov dh,01h

mov dl,present_position

int 10h

mov al,[di]

; 出现下一个新字母的数法

add al,7

cmp al,7ah

ja convey_letter

- 13 -

----打字练习

mov ah,0ah

mov bh,00h

mov cx,01h

int 10h

mov [di],al

add letter_counter,01h

jmp nextcycle

convey_letter:

sub al,7ah

add al,61h

mov ah,0ah

mov bh,00h

mov cx,01h

int 10h

mov [di],al

add letter_counter,01h

jmp nextcycle

clear_screen 01,01,23,78

mov ah,02h

mov bh,00h

mov dh,11d

mov dl,20d

int 10h

inc dh

inc dh

mov ah,02h

mov bh,00h

int 10h

notkey:

mov ah,07h

int 21h

cmp al,0dh

- 14 -

----打字练习

je to_start

cmp al,1bh

je over

jmp notkey

to_start:

clear_screen 00,00,24,79

jmp start

over: clear_screen 01,01,23,78

mov ah,02h

mov bh,00h

mov dh,11d

mov dl,15h

int 10h

mov ah,02h

mov bh,00h

mov dh,13d

mov dl,15h

int 10h

mov ah,07h

int 21h

mov ah,07h

int 21h

clear_screen 00,00,24,79

mov ax,4c00h

int 21h

main endp

code ends

end start

;程序结束

- 15 -

----打字练习

4 程序调试运行

4.1 调试阶段

(1)打开windows命令窗口,进入masm程序的安装目录,汇编源文件,如图:

打字练习

图4.1.1 文件链接图

(2)链接原文件,并运行可执行文件,如下图:

打字练习

图4.1.2 运行可执行文件图

- 16 -

----打字练习

(3)进入主程序段显示提示信息,程序功能应该实现下图所示:

打字练习

图4.1.3 程序主界面图

4.2 运行阶段

(1)按回车键进入打字练习页面,并且开始练习打字,如下图:

打字练习

图4.2.1 打字主界面图

- 17 -

----打字练习

(2)在打字练习过程中,按空格键暂停,按“ESC”键为返回主页面。最后练习打字结束按“E”退出程序,图形如下:

打字练习

图4.2.2 回到主界面图

4.3 调试运行与结果分析

在程序编写的过程中,出现了很多细小的错误,比如:循环结构嵌套使用出现了错误,导致程序运行不出结果;在编写过程中误打入了多余的字符;未知类型的错误,如字符拼写出现错误;寄存器用错,操作数寻址方式不正确,操作数类型不匹配,双操作数指令的两个操作数长度不一致,一个是字节,一个是字。源程序文件行:WARNING/ERROR错误信息码:错误描述信息,其中,错误描述信息码由五个字符组成,第一个是字母A,表示汇编语言程序出错;接着有一个数字指明出错类别:#39;2'为严重错误,'4'为严肃警告,'5'为建议性警告,最后三位为错误编号.

经过反复的纠错,在这些错误中很多可以避免,但是也有很多需要在同学和老师的帮助下可以得到可靠的解决,在正确程序的编写下,终于成功调试出了该运行程序,运行结果如上述图所示。

- 18 -

----打字练习

5 总结

在短暂几天的时间里,汇编语言课程设计结束了,我的收获很大。通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。

- 19 -

----打字练习

参 考 文 献

[1] 《汇编语言程序设计》,吴向军等,高等教育出版社,2002

[2] 《IBM-PC汇编语言及程序设计实验教程》,沈美明等,清华大学出版社 ,2001

[3] 《汇编语言程序设计》, 钱晓捷等,电子工业出版社,2000

[4] 《汇编语言程序设计案例精编》,李珍香等,中国水利水电出版社,2004

[5] 《汇编语言程序设计》,白小明,中国铁道出版社,20090801

[6] 《汇编语言程序设计》,王成耀,姚琳,机械工业出版社,20030301

- 20 -