汇编打字练习1Word文档下载推荐.docx

上传人:b****6 文档编号:18727309 上传时间:2022-12-31 格式:DOCX 页数:25 大小:82.94KB
下载 相关 举报
汇编打字练习1Word文档下载推荐.docx_第1页
第1页 / 共25页
汇编打字练习1Word文档下载推荐.docx_第2页
第2页 / 共25页
汇编打字练习1Word文档下载推荐.docx_第3页
第3页 / 共25页
汇编打字练习1Word文档下载推荐.docx_第4页
第4页 / 共25页
汇编打字练习1Word文档下载推荐.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

汇编打字练习1Word文档下载推荐.docx

《汇编打字练习1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编打字练习1Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。

汇编打字练习1Word文档下载推荐.docx

接着定义我们的数据段代码。

在数据段中,有我们菜单中所需要显示的提示信息,还有要显示在界面上方的字母乱序,以及给显示字母乱序所留出的数据空间。

接下来就是定义堆栈段代码,为各段留下空间。

再下来就是最重要的代码段,因为所有的功能都是在代码段中实现的。

代码段中先实现显示主菜单、按Enter键开始程序和按E退出这几项简单的功能。

接着实现显示字母乱序的功能,主要思想是将字母乱序放到之前定义的寄存器中。

然后实现接受键盘所输入的内容的功能。

如果输入的是Esc,则返回主菜单;

如果输入的是Space,程序就暂停;

如果是正确的字母,改字母就消失。

消失的思想就是在当前字母位置输入空格,然后光标放到下一个下落的字母的位置。

11.1原“typetest.asm”程序结构

打字练习程序的主要流程如图所示。

11.2已经实现的功能(修改的、新编写的)程序结构

设置输入界面,用户输入密码后才能进入主菜单;

iddb1,1,2,3,5,8

infdb?

stringdb0ah,0dh,"

Pleaseenterthepassword(******):

$"

string1db0ah,0dh,"

Thepasswordiswrong,pleaseenterthepasswordagain:

leadx,string

movah,09h

int21h

two:

movcx,6

leasi,id

again:

movah,01h

andal,0fh

cmpal,[si]

jnzone

incsi

incbx

loopagain

jmpexit1

one:

leadx,string1

jmptwo

修改主菜单,在主菜单上显示当天日期;

movcx,6

movbx,0

movah,0

moval,9

s:

pushcx

pushax

out70h,al

inal,71h

movah,al

movcl,4

shrah,cl

andal,00001111b

addah,30h

addal,30h

movbyteptrds:

[bx],ah

[bx+1],al

popax

cmpal,4

jnas1

jmpshorts2

s1:

decal

s2:

cmpal,7

jneok

subal,2

ok:

addbx,3

popcx

loops

movdx,0

movah,9

修改主菜单,增加可供用户选择难度级别的选项。

mes11db"

Hit:

mes12db"

Right:

mes13db"

Score:

movah,01h

cmpal,'

1'

jenext1

2'

jenext2

3'

jenext3

jmpkeyin1

next1:

movbx,9999h

movspeed,bx

jmpnext

next2:

movbx,5000h

next3:

movbx,2000h

next:

修改程序,在屏幕右上角显示用户得分、已输入字母数、正确数。

score_displayproc

Init_place00d,65d

int10h

leadx,mes12

movax,score

callwritedec

Init_place00d,43d

leadx,mes13

ret

score_displayendp

hit_displayproc

movah,0ah

moval,"

"

;

将空格赋值为AL

movbh,00h

movcx,01h

int10h

mov[save],dl

mov[save+1],dh

Init_place00d,55d

leadx,mes11

addhit,1

movax,hit

movdl,[save]

movdh,[save+1]

hit_displayendp

将程序中的“置光标位置”程序段落用宏调用完成,添加“置光标位置”宏定义。

Init_placemacrorow,col;

置光标位置宏定义

movah,02h

movbh,00h

movdh,row

movdl,col

int10h

endm

12对该“打字练习程序”的进一步设想

12.1

设置限定出错次数,到达该出错次数,游戏停止

wrongdb30

mes9db"

GameOver!

decwrong

cmpwrong,0

jnepass

jmpover

over:

clear_screen01d,01d,23d,78d;

清屏

menu03d,33d,mes9

movax,4c00h;

退出程序

13课程设计总结

设计体会

刚拿到这个题目觉得特别难,感觉无从下手。

汇编语言不同于高级语言,对于高级语言,我们心中可以有一个非常清晰的思路,在实现功能的时候非常得心应手。

但汇编语言不同,它是面向机器的语言。

用它编写程序时的思路应该按照机器执行程序的思路来编写,所以这个挑战对我来说非常大。

在编写程序之前,首先要摒弃高级语言思路的干扰。

在做准备工作的时候,我从网上找到了相关的代码,照着别人的步骤感受汇编语言编写程序的思路。

很多地方都不是太明白,但是通过查询课本以及上网找相关资料,还是把一些内容理解了。

在编写的时候,我也是按照别人的思路,一步一步进行。

很多地方看似简单,但是等到自己亲自实践的时候就编的很复杂。

汇编语言的前后联系非常紧密,如果要改一点东西的话整个程序的很多地方都要重新做,可以说是牵一发而动全身。

所以在编写的时候要很仔细,要记住前面已经实现了那些功能,还有那些功能要实现,这些必须记好,否则程序会出错。

通过这次课程设计,我了解了汇编语言编写程序的步骤:

先确定程序要实现的功能,接着定义需要的寄存器、存储器,如果需要的话还要画出流程图。

然后逐个模块实现其功能。

如果将模块分好了,再去实现它的功能就不是那么复杂了。

此次的课程设计,提高了我阅读和分析程序的能力。

因为刚一拿到目标代码时,有太多的不明白,必须一行一行地分析其目的和功能。

而时间又比较紧迫,所以我在比较短的时间里分析出了代码的道理。

在这个过程中我的分析与模仿能力得到了提高。

系统改进

本系统可以改进的地方有很多。

首先我做的界面不够华丽,显得很单调。

其次,字母下落的速度太单一,如果能随着玩的时间增加再加快就更好了。

而且计分系统没把字母输入时间也计算在内。

难度选择时候没有输入其它字符时的处理如果能加上这些功能的话那么程序的可用性以及完整性就有能上一台阶。

14软件使用说明

登入密码:

112358

15附录(参考文献,原代码:

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

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

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

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

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

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

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

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

原代码

;

Assemblyprogramfortestyourtypeskills

Writedbyin06/24/2003

ModifiedbyMishuangin06/06/2005

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

Init_boardermacrorow,col,char,dhdl,count;

设置边框

Localll

movcx,count

ll:

movah,02h

int10h

pushcx

movah,0ah

moval,char

movcx,01h

popcx

incdhdl

loopll

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

clear_screenmacrotop,left,bottom,right;

清屏宏定义

movah,06h

moval,00h

movbh,07h

movch,top

movcl,left

movdh,bottom

movdl,right

movdh,00h

movdl,00h

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

menumacrorow,col,text;

菜单显示宏定义

movbh,00h

movdh,row

movdl,col

int10h

movah,09h

leadx,text

int21h

======================================================

includeylib.h

Datasegment

db"

00/00/0000:

00:

00"

'

$'

ZKdb"

WELCOMETOPLAY$"

datedb"

date:

mes0db"

PressEnterkeytocontinue.......$"

mes1db"

Whenaletterisdropping,pleasehitit!

mes2db"

Pressspacekeytopause!

mes3db"

PressESCkeytoreturnmaininterface!

mes4db"

Pressletter'

E'

toexit!

mes5db"

Pleasechoosethedifficulty:

mes6db"

No.1easy$"

mes7db"

No.2normal$"

mes8db"

No.3hard$"

mes10db"

YourScoreis:

Speeddw?

Lettersdb"

jwmilzoeucgpravskntxhdyqfb"

db"

iytpkwnxlsvxrmofzhgaebudjq"

nwimzoexrphysfqtvdcgljukda"

Present_positiondb1

db0

scoredw0

hitdw0

rightdw0

savedb?

Dataends

=========================================================

codesegment

mainprocfar

assumecs:

code,ds:

data

start:

movax,data

movds,ax

moves,ax

movcx,5000h

movah,01h

int10h;

设置光标类型

clear_screen00d,00d,24d,79d;

清屏

exit1:

Init_boarder00d,00d,0ah,dl,80d

Init_boarder24d,00d,0ah,dl,80d

Init_boarder00d,00d,0ah,dh,25d

Init_boarder00d,79d,0ah,dh,25d;

menu05d,15d,ZK;

显示菜单

menu07d,15d,date

int21h

menu09d,15d,mes0

menu11d,18d,mes1

menu13d,18d,mes2

menu15d,18d,mes3

menu17d,15d,mes4

Init_place22d,33d

keyin:

movah,07h;

从键盘输入命令字符

int21h

cmpal,0dh

jebegin

不等就和e做比较

jeexit;

如果相等则转exit

jmpkeyin;

不等跳转到keyin

exit:

movax,4c00h;

begin:

clear_screen00d,00d,24d,79d;

清屏

menu00d,43d,mes13

menu00d,55d,mes11

menu00d,65d,mes12

menu05d,15d,mes5;

menu11d,18d,mes6

menu13d,18d,mes7

menu15d,18d,mes8

keyin1:

clear_screen01d,01d,23d,78d;

Init_boarder23d,01d,01h,dl,78d;

设置边框

Init_place01h,01h

movcx,78

leasi,letters

nextletter:

movah,02h;

显示字母

movdl,[si]

int21h

incsi

loopnextletter

start_game:

movah,2ch

int21h;

调取系统时间chcldh分别存放时分秒

incdl;

自增

cmpdl,78

jnasg1

subdl,78

sg1:

movpresent_position,dl

leadi,letters

adddi,wordptrpresent_position;

将当前列数赋给di

decdi;

自减

movdl,present_position;

将当前列数赋给dl

movah,02h

movdh,01h

int10h;

movcx,21d;

设置循环次数

nextrow:

pushcx

movcx,speed;

设置字母下降速度

wait_for_key:

;

延迟

pushcx

movcx,1000

delay:

loopdelay

pushdx

movah,06h;

从键盘输入字符

movdl,0ffh

popdx

jzpass

cmpal,1bh;

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

jeto_start

cmpal,"

如果键入SPACE,则游戏暂停

jnepass0

pause:

pushdx;

暂停处理

movah,06h

将字符和空格作比较

jnepause;

不等则转换至空格

jmppass

to_start:

jmpexit1

pass0:

c

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

当前位置:首页 > 经管营销

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

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