汇编语言课程设计报告-打字练习程序.doc

上传人:wj 文档编号:2851338 上传时间:2023-05-04 格式:DOC 页数:22 大小:232.50KB
下载 相关 举报
汇编语言课程设计报告-打字练习程序.doc_第1页
第1页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第2页
第2页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第3页
第3页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第4页
第4页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第5页
第5页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第6页
第6页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第7页
第7页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第8页
第8页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第9页
第9页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第10页
第10页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第11页
第11页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第12页
第12页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第13页
第13页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第14页
第14页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第15页
第15页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第16页
第16页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第17页
第17页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第18页
第18页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第19页
第19页 / 共22页
汇编语言课程设计报告-打字练习程序.doc_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言课程设计报告-打字练习程序.doc

《汇编语言课程设计报告-打字练习程序.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计报告-打字练习程序.doc(22页珍藏版)》请在冰点文库上搜索。

汇编语言课程设计报告-打字练习程序.doc

提供全套毕业设计,欢迎咨询

汇编语言课程设计报告

程序题目:

打字练习程序

学生姓名:

XX

班级:

2010级计算机科学与技术专业4班

学号:

XXX

院系:

计算机科学学院

指导教师:

XXX

目录

1设计目的 3

2概要设计 3

2.1系统总体分析 3

2.2主模块框图及说明 4

3详细设计 5

3.1主模块及子模块说明 5

3.2各模块详细设计 5

3.2.1主界面模块 5

3.2.2随机字母产生模块 7

3.2.3字母落下模块 9

3.2.4暂停模块 10

4.程序调试 11

4.1运行界面分析 11

4.2调试过程及分析 13

5心得体会 13

5.1设计体会 13

5.2系统改进 13

参考文献 14

附:

程序源代码 14

II

陕西师范大学汇编语言课程设计实验报告

1设计目的

本程序运行后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出。

通过课程设计,主要达到以下目的:

1. 增进对汇编语言的认识,加强用汇编语言编程的能力;

2. 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等;

3. 了解和掌握汇编语言程序设计过程、方法及实现,为以后微机原理课程的学习打下良好基础;

4. 通过课程设计可以使我们更加了解书上的知识,了解书上的语句并且能够应用自己的程序中;

5. 掌握屏幕输出显示的设计方法。

2概要设计

2.1系统总体分析

根据题目要求可以看到有以下几部分来实现打字练习:

1.由26字母乱序组成一行显示行。

2.字母自动落下。

3.从键盘输入的字母与落下字母相同则该字母消失,并且下一个字母自动接着落下。

4.按下“Ese”键则程序返回到主界面。

5.按空格键游戏暂停。

6.在主界面按“E”则程序退出。

打字练习的主要功能由以上六部分组成,每一部分之间的联系都是比较紧密的。

对于以上及部分,最主要的部分就是第二三两个部分,这是打字练习的重点,需要详细设计其所需要的功能。

2.2主模块框图及说明

结束

随即字母落下

当前字母消失

暂停

判断输入按键

键入字符是否与下落一致

是否是空格

开始

输入空格

是否是ESC

E其他键

ENTER

ENTER

从键盘输入字符

是 否

图2-1程序设计流程图

程序的核心模块是打字,各个模块功能的实现主要是通过键盘输入指令来融合的,主要流程是先到主界面,然后选择你想要进行的指令ENTER进入打字界面开始打字,E退出程序,空格在打字练习时执行暂停的功能,ESC是从打字界面返回到主界面。

核心模块的流程大体如下面的流程图图2-1:

3详细设计

3.1主模块及子模块说明

主界面是程序的初始入口,也是其他功能模块的接入点。

主模块是打字模块,也是核心模块,主要通过各个键盘符来控制各个子模块之间的协调。

子模块分为判断输入字符判断模块(这当中包含两个小的子模块:

主界面输入字符判断和打字模块输入字符判断)、暂停模块、退出模块(这当中包含两个小的子模块:

打字界面返回主界面模块和主界面退出程序模块)

3.2各模块详细设计

3.2.1主界面模块

当程序运行后,我们首先要进行选择,是要继续进行即进入打字练习程序还是终止练习退出程序。

所以,在这里我们需要设置一个程序,该程序要判断键盘键入的字符,我们不妨规定ESC键和ENTER键分别为终止程序的控制键和进入打字练习程序的控制键,即当检验到键盘输入ESC后,退出程序;当键盘输入为ENTER时进入打字练习程序。

单元程序如下:

datasegment

ZKdb"HELLO,WELCOMETOHERE!

$"

nodb"MynameisXX,mystudentnumberis:

XX.$"

megdb"Press'ENTER'keytocontinue.......$"

meg1db"Whenaletterisdropping,pleasehitit!

$"

meg2db"Press'SPACE'keytopause!

$"

meg3db"PressESCkeytoreturnmaininterface!

$"

meg4db"Pressletter'E'toexit!

$"

;以上设置主界面的显示方式。

clear_screen00d,00d,24d,79d

Init_game00d,00d,0ah,dl,80d,nextsign1

Init_game24d,00d,0ah,dl,80d,nextsign2

Init_game00d,00d,0ah,dh,25d,nextsign3

Init_game00d,79d,0ah,dh,25d,nextsign4

menu05d,15d,ZK;菜单信息的宏调用

menu07h,15d,no

menu09d,15d,meg

menu11d,15d,meg1

menu13d,15d,meg2

menu15d,15d,meg3

menu17d,15d,meg4

put:

movah,02h;设置光标位置

movbh,00h

movdh,22d

movdl,33d

int10h

movah,01h;从键盘输入任意字符

int21h

cmpal,0dh

jespeed3

cmpal,45h

jeexit

以上代码是清屏,并调用宏实现主界面的显示,并在主界面中设置了菜单显示后的光标位置,以方便使用者的操作。

in_cycle:

addcx,01h

cmpcx,1000

jnein_cycle

pushdx

movah,06h;从键盘输入字符

movdl,0ffh

int21h

popdx

jzpass

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

jeto_start1

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

jepause

cmpal,[di];输入字母正确!

则字母消失

jedisappear

to_start1:

;返回主菜单

jmpstart

上述程序段中用到了中断INT21,利用中断的有关规定,先将01H存入到AH当中,则AL中即为由键盘键入的字符。

在此,先通过CMP指令来判断输入的字符是否是ENTER键(ENTER键的ASCII码为十六进制的0DH,程序开头部分的宏定义已经令CR为0DH),如果是的话,程序将跳转到程序disappear,disappear是定义的又一个程序,该程序即为打字练习程序的核心部分。

如果不是ENTER的话,将执行下一条指令,即判断键盘键入的是否为E键,此功能由CMP AL,1BH来实现,其中1BH是E键的ACSII码的十六进制的表示。

如果是E键的话,程序将跳转到TZD_1子程序,再通过TZD_1程序来判断是否要退出打字练习程序。

如果键盘键入的既不是ENTER也不是E键的话,程序将继续等待键盘的输入,直到输入的按键为ENTER和E当中的一个为止。

3.2.2随机字母产生模块

当用户选择继续运行程序且进入打字练习界面时,则程序需要首先为用户输出一列随机的字符序列,这时程序就需要自动的调用产生随机字符序列的程序。

程序段如下:

lettersdb"jwmilzoeucgpravskntxhdyqfb"

db"iytpkwnxlsvxrmofzhgaebudjq"

db"nwimzoexrphysfqtvdcgljukda"

letters_bakdb"jwmilzoeucgpravskntxhdyqfb"

db"iytpkwnxlsvxrmofzhgaebudjq"

db"nwimzoexrphysfqtvdcgljukda"

letter_counterdb0

begin:

clear_screen01d,01d,23d,78d;清屏宏调用

clear_screen01d,01d,23d,78d

Init_game23d,01d,01h,dl,78d,nextsign5

movah,02h

movbh,00h

movdh,01h

movdl,01h

int10h

movcx,00h

leasi,letters

上述的程序段中,begin实现了输出的字符的随机显示,当然这个随机是我们要事先通过自己随机定义一段由26个字母随机组成的序列,然后由begin来调用,从而间接来实现随即字母的产生。

Begin段利用了INT10,其功能是设置屏幕显示方式,灵活的利用INT10丰富的指令功能,可以巧妙的设计出想要的程序来。

INT10中断规定,DH和DL共同控制着字符输出的位置,其中DH为字符输出的行标,DL为字符输出的列标,通过改变DH和DL的值,可以改变字符在命令符输出屏幕上的位置;如果AH=09H时,则AL=字符,BL则是控制着输出的字符属性或颜色;计数器CX中存放的则是重复输出字符的个数。

本程序中令CX中存放78,也就是说loop循环程序将循环78次,程序的输出为78个字符,当loop循环程序运行结束之后,程序将执行下一条指令,调用DAZIRUKOU子程序。

使得程序继续运行,让用户按照程序自动产生的字符串来进行打字练习。

3.2.3字母落下模块

程序自动进入打字功能,自动落下字符,等待键盘输入字符以此来判断输入者想什么,如果键盘输入与预期的相符合则程序自动执行相关功能。

如果输入字符与落下字符相同,程序执行当前字母消失和产生下一落下字母的功能,字母落下功能的实现是通过逐行替换的方法实现的,字母在当前行出现会有一个延迟时间,当过了这个延迟时间时,程序执行当前位置清空操作,并在下一行显示上一行的字母。

代码如下:

hit:

movah,02h

movbh,00h

movdh,01h

movdl,present_position

int10h

moval,[di];出现下一个新字母的数法

addal,7

cmpal,7ah

jaconvey_letter

movah,0ah

movbh,00h

movcx,01h

int10h

mov[di],al

addletter_counter,01h

jmpnextcycle

convey_letter:

subal,7ah

addal,61h

movah,0ah

movbh,00h

movcx,01h

int10h

mov[di],al

addletter_counter,01h

jmpnextcycle

clear_screen01,01,23,78

movah,02h

movbh,00h

movdh,11d

movdl,20d

int10h

incdh

incdh

movah,02h

movbh,00h

int10h

disappear:

;击中字母后输出空格

popcx

popcx

movah,0ah

moval,""

movbh,00h

movcx,01h

int10h

jmphit

3.2.4暂停模块

如果输入空格,则程序执行暂停功能,暂停功能的实现是通过以下方法实现的,当从键盘输入空格时,程序收到暂停信号,执行跳转,跳转到一个死循环模块,就是无限显示当前屏幕,不做其他任何操作,直到键盘再次输入空格时,程序收到暂停结束指令,跳转回到主程序模块,继续执行主模块的功能。

代码如下:

pass:

popcx

inccx

cmpcx,speed

jeprint

jmpout_cycle

pause:

pushdx;暂停处理

movah,06h

movdl,0ffh

int21h

popdx

cmpal,""

jnepause

jmppass

4.程序调试

4.1运行界面分析

程序运行后的主界面如图4-1,主界面第一行是欢迎语,第二行是作者,然后往下是操作说明,为使用者说明该程序的使用方法。

图4-1程序主界面

当用户按下ENTER键时,程序自动跳入到图4-2的界面,字母随机落下,用户便可以开始打字练习了。

练习只要按照说明来做就可以了。

图4-2打字界面

4.2调试过程及分析

当程序运行时,我发现当按esc退出,如果之前按下空格键暂停时,则退不出去,必须再次按下空格是程序开始运行才能退出。

主要是因为按下空格键时,程序收到暂停信号,执行跳转,跳转到一个死循环模块,就是无限显示当前屏幕,不做其他任何操作,直到键盘再次输入空格时.

5心得体会

5.1设计体会

课程设计对我们多数初学汇编的学生来说,确实是一座高峰。

翻越他是需付出努力的。

我也是在探索了好久才弄明白他的,在此做个小总结,也许对自己今后的学习有些借鉴作用。

在整个程序的编写中,调试占了很大部分的时间,要想写好汇编程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug指令。

通过这次实际动手能力的培养,我进一步熟悉了汇编的结构和使用法,基本达到能独立阅读。

我觉得学习汇编的一个较大好处就是可以了解电脑中每一个字节数据的来龙去脉,我觉得学习汇编可以发挥一下自己的空间想象力。

5.2系统改进

这次课程设计,其主题内容都以满足课程实际的要求,各功能都能相应的完成,即写一个程序,运行可执行程序后,出现主界面,按回车键出现由26个字母组成的乱序行,这时其中任一字母落下,在键盘上敲入该字母,如果输入正确,字母消失;按回车键进入打字练习;按ESC键返回主界面;按空格键暂停;按‘E’退出,但是感觉整个程序界面不够华丽,看着粗糙的界面,不能引起别人的注意,下次能够吧界面做得更好看一些。

参考文献

[1]李敬兆8086/8088和arm核汇编语言程序设计中国科技大学出版社

[2]沈美明,温冬婵编著IBM—PC汇编语言程序设计(第二版)清华大学出版社出版

[3]罗云彬Windows环境下32位汇编语言程序设计电子工业出版社

[4]【美】KipR.Irvine著,温玉杰等译Intel汇编语言程序设计(第四版)电子工业出版社

[5]吕晓庆80386/80486系统编程实践淅江大学出版社

[6]袁可风汇编语言程序设计江西高校出版社

[7]戴水贵Windows汇编语言程序设计教程清华大学出版社

[8]罗杰INTEL86系列汇编语言程序设计江西科学技术出版社

附:

程序源代码

Init_gamemacroop1,op2,op3,op4,op5,op6

movcx,00h

movdh,op1

movdl,op2

op6:

movah,02h

movbh,00h

int10h

pushcx

movah,0ah

moval,op3

movbh,00h

movcx,01h

int10h

popcx

inccx

incop4

cmpcx,op5

jneop6

endm

clear_screenmacroop1,op2,op3,op4;清屏宏定义

movah,06h

moval,00h

movbh,07h

movch,op1

movcl,op2

movdh,op3

movdl,op4

int10h

movah,02h

movbh,00h

movdh,00h

movdl,00h

int10h

endm

menumacroop1,op2,op3;菜单显示宏定义

movah,02h

movbh,00h

movdh,op1

movdl,op2

int10h

movah,09h

leadx,op3

int21h

endm

datasegment

ZKdb"HELLO,WELCOMETOHERE!

$"

nodb"MynameisLiuHui,mystudentnumberis:

41012169.$"

megdb"Press'ENTER'keytocontinue.......$"

meg1db"Whenaletterisdropping,pleasehitit!

$"

meg2db"Press'SPACE'keytopause!

$"

meg3db"PressESCkeytoreturnmaininterface!

$"

meg4db"Pressletter'E'toexit!

$"

speeddw500d

lettersdb"jwmilzoeucgpravskntxhdyqfb"

db"iytpkwnxlsvxrmofzhgaebudjq"

db"nwimzoexrphysfqtvdcgljukda"

letters_bakdb"jwmilzoeucgpravskntxhdyqfb"

db"iytpkwnxlsvxrmofzhgaebudjq"

db"nwimzoexrphysfqtvdcgljukda"

letter_counterdb0

life_flagdb78dup(0)

position_flagdb78dup(0)

present_positiondb1

dataends

stacksegmentparastack'stack'

db64dup(0)

stackends

codesegment

mainprocfar

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movletter_counter,00h

movpresent_position,1

leasi,position_flag

movah,00h

movcx,00h

init_postion_flag:

mov[si],ah

incsi

inccx

cmpcx,78d

jneinit_postion_flag

leadi,letters

leasi,letters_bak

movcx,00h

init_

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2