汇编语言猜数字课程设计.docx
《汇编语言猜数字课程设计.docx》由会员分享,可在线阅读,更多相关《汇编语言猜数字课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
![汇编语言猜数字课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/21/adedd0f4-982a-4bb2-8df9-09bb35ad52c8/adedd0f4-982a-4bb2-8df9-09bb35ad52c81.gif)
汇编语言猜数字课程设计
汇编语言
课程设计
题目:
专业班级:
姓名:
_______
学号:
摘要
随着计算机技术的普及及其向其他学科的快速渗透浅显的计算机技术已经普遍不能适应当今的形势,这在就业以及进入新的工作方面,就更加突出。
汇编语言是一种面向CPU指令系统的程序语言,它采用指令系统的助记符来表示操作码和操作数,用符号地址表示操作数地址。
本程序<<猜数字游戏>>主要由汇编语言相关知识编写而成。
关键词:
汇编语言;猜数字;指令系统;游戏
Abstract
Withthepopularityofcomputertechnologyandtherapidpenetrationofotherdisciplinesplaincomputertechnologyhasgenerallynotadapttotoday'ssituation,whichinemploymentandaccesstothenewwork,themoreprominent.CPU-orientedassemblylanguageisalanguageinstructionprogram,whichusesthesystemtorepresentthemnemonicinstructionopcodesandoperands,saidoperandaddresswithsymbolicaddresses.
Thisprogramismainlyguessinggamewritteninassemblylanguageknowledgetogether.
Keywords:
assemblylanguage;guessing;instruction;games
目录
1.概述1
1.1题目描述1
1.2功能简介1
2.系统总体设计1
2.1系统总体分析1
2.2程序设计流程图2
3.详细的算法描述3
3.1随机数的产生3
3.2从键盘输入数据3
3.3数据的比较3
3.4其他指令3
4.调试分析4
4.1运行方法4
4.2程序运行界面4
4.2.1程序开始界面4
4.2.2程序进行比较5
4.2.3.得出结果5
5.使用说明6
6.总结7
参考文献8
致谢9
源程序10
1.概述
1.1题目描述
设计一个猜数字的游戏,程序运行后自动产生一个1~100之间的随机整数。
游戏开始后,程序根据游戏者输入的数字与所需猜测数字进行比较并给出响应,游戏者根据程序给出的响应再次猜数字,最后得到正确数字。
程序应有相应的操作、输入和输出提示。
1.2功能简介
本程序作为一个猜字游戏软件,以QASM作为软件开发环境,利用随机函数通过数字比较,编程实现了一个在DOS下运行的猜数字游戏软件。
首先通过指令在程序中产生随机数,由键盘输入的数字与其比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,则直接退出。
2.系统总体设计
首先通过指令在程序中产生随机数,由键盘输入的数字与其比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,则直接退出。
根据需求分析的结果,本系统至少有以下模块:
产生随机数模块、输入模块、比较模块、提示模块。
2.1系统总体分析
该课程设计的特点在于程序运行后产生随机数的过程比较巧妙。
它是调用了BIOS功能调用的1AH号中断,读取系统时钟。
然后进行除法运算得到余数,再进行加法运算得到符合要求的随机数。
此课程设计的另外一个特点是定义了多个子程序,将各功能模块化,便于在调试过程中查找错误和修改,不会影响其他模块。
各模块功能说明如下:
产生随机数模块的主要功能是程序运行后自动产生一个1~100之间的随机整数。
输入模块的主要功能是实现从键盘输入用户所猜测的数据。
比较模块的主要功能是用输入的数据与随机数比较。
提示模块的主要功能是经过比较后提示用户输入数据与随机数的差距。
2.2程序设计流程图
根据上述分析,该系统的程序流程图如下图所示:
图2.1程序设计流程图
3.详细的算法描述
3.1随机数的产生
通过查找各种资料知,随机数的产生也是一种算法,通过种子数据,计算出不同的随机数。
但,此次试验,我通过对系统当前时间的提取来表示随机数,即用时间中的“秒”来作这个随机数。
指令为:
movah,2ch;取系统时间,CH:
CL=时间:
分钟;DH=秒
int21h
3.2从键盘输入数据
如果仅用指令:
movah,01h
Int21h
来从键盘读取数据,则只能取一个字符,即,只能读取一位数字;在试验中通过反复调试,可以对每次输入的数(存放于al中)与“回车”的ASCII比较,如果不是“回车”,则返回继续输入;如果是回车,则跳出,完成数据的输入。
每一次返回继续输入时,原来的al中的数据要以个位加入到bx中,即,bx=bx*10+al;这样可以保证输入的数据不会丢失。
3.3数据的比较
用输入的数据(存放于bx中)与随机数(存放于a中:
mova,dx)比较;如果大于,则输出提示数据太大,请重新输入,并跳转到键盘输入数据指令;如果小于,则输出提示数据太小,请重新输入,并跳转到键盘输入数据指令;如果等于,则提示正确,并结束。
其中,小于跳转用jb;大于跳转用ja;等于用jz。
3.4其他指令
回车换行指令:
为了保持程序输出结果的工整性,多用回车换行指令:
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
输出提示性语句指令:
为使程序输出界面更互动化,常用提示性语句如:
MOVAH,9
MOVDX,OFFSETmess2
MOV21h
退出语句:
使用该语句退出整个程序:
MOVAH,4CH
INT21H
4.调试分析
4.1运行方法
…>masm01.asm
…>Link01
…>01
4.2程序运行界面
4.2.1程序开始界面
1)本程序的运行环境为DOS操作系统。
2)进入演示程序后,即显示主菜单界面。
3)程序启动后产生随机数,系统给出提示要求用户输入数据,如图所示:
图4.1程序开始界面
4.2.2程序进行比较
由键盘输入的数字与随机数比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果输入的数不是十进制数,则直接退出,如图所示:
图4.2程序比较提示界面
4.2.3.得出结果
PLEASEINPUTYOURNUMBER:
13
YOURNUMBERISSMALLER,PLEASECHANGEYOURNUMBER:
30
YOURNUMBERISSMALLER,PLEASECHANGEYOURNUMBER:
50
YOURNUMBERISSMALLER,PLEASECHANGEYOURNUMBER:
60
YOURNUMBERISLARGER,PLEASECHANGEYOURNUMBER:
55
YOURNUMBERISLARGER,PLEASECHANGEYOURNUMBER:
51
YOURNUMBERISSMALLER,PLEASECHANGEYOURNUMBER:
52
YOURNUMBERISSMALLER,PLEASECHANGEYOURNUMBER:
53
THAT’Stherightnumber!
!
!
用户输入的数字与随机数比较,当与随机数相等时输出THAT’Stherightnumber!
!
!
。
如图所示:
图4.3程序得出结果界面
5.使用说明
1)程序经过汇编、链接运行后,屏幕上将显示猜数字游戏的主菜单。
如下如下示:
Please input your number:
玩家在键盘输入数字开始游戏。
2)在一次游戏中,玩家只能输入数字,若输入字母或符号,则自行退出游戏。
如果玩家猜中数字,则游戏给出提示信息“That's the right number!
!
!
”
3)如果玩家再一次游戏结束后想接着玩,则需重新运行游戏,如果玩家不想接着玩,则直接关闭就可退出游戏。
6.总结
通过这次课程设计,我重温了本学期所学的知识,认识到了自己在学习方面的缺陷和不足。
我个人认为本次试验的最大难点就是产生随机数,然而通过查询,发现汇编中产生随机数的命令都很复杂,并且有些命令是我没有见过的,经过多次考虑,还是选择了使用秒针随机选中的数据作为随机数。
这或许是一个特点,也是一个不足!
通过这次的课程设计,让我重温了一遍汇编语言的知识。
重新熟悉了各种汇编指令。
特别是对于算法思想有了一定的提高,各种汇编指令的小技巧,数据各种各样的操作指令序列让我感觉到,汇编语言也能够越学越让人沉入,容易让人感到成功的喜悦!
虽然程序已经写完,但是还是遗憾不能够弄懂真正的随机数是怎样产生的;另外,也因为这个程序小了点,所以没有用子程序的方法,我想如果加大程序,还是用子程序的方法会显得条理更加清楚明白。
参考文献
[1]钱晓捷.汇编语言程序设计[M].北京:
电子工业出版社,2012.6.
[2]沈美明温冬婵等.IBM-PC汇编语言程序设计[M].北京.清华大学出版社,2001.8。
[3] 詹仕华等.汇编语言程序设计[M].北京:
中国电力出版社,2008.2.
[4]詹仕华等.汇编语言程序设计习题解答及课程实验、设计辅导[M].北京:
中国电力出版社,2008.2.
[5]王爽.汇编语言[M]. 北京:
清华大学出版社2003.5.
[6]曹加恒等.新一代汇编语言课程设计[M].北京:
高等教育出版社,2003.6.
[7]杨路明等.汇编语言程序设计[M].长沙:
中南大学出版社,2005.8.
致谢
在本次课程设计中,我非常感谢在我遇到问题时耐心给我讲解和解决问题的老师和同学们。
在老师的帮助下我不但完成了课程设计,而且也学到了很多知识,让我掌握了学习方法。
同学之间的帮助,相互鼓励,以及相互探讨,给了我很大的信心,以及跨越式的进步。
在课程设计即将完成之际,回顾紧张但又充实的制作过程,我在此向所有关心我的及帮助我的老师和同学们致以最真诚的感谢。
源程序:
dataSEGMENT
mess1db"Pleaseinputyournumber:
$"
mess2db"Yournumberislarger,pleasechangeyournumber:
$"
mess3db"Yournumberissmaller,pleasechangeyournumber:
$"
mess4db"That'stherightnumber!
!
!
$"
adw?
dataENDS
codeSEGMENT
assumecs:
code,ds:
data
begin:
movax,data
movds,ax
movah,9
int21h
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
movah,2ch;取当前时间的秒为随机数
int21h
moval,dh
mova,ax
movbx,0
l0:
MOVAH,1;输入十进制数
INT21h
CMPAL,0dh
JZl4
cmpal,48
jbexit
cmpal,57
jaexit
ANDAL,0fh
MOVAH,0
XCHGAX,BX
MOVCX,10
MULCX
ADDBX,AX
JMPl0
l4:
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
cmpbx,a;输入值与随机数比较
jbl1;小于
cmpbx,a;大于
jal2
cmpbx,a;等于
jzl3
l1:
movah,9
movdx,offsetmess3
int21h
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
movax,0
movbx,0
l2:
movah,9
movdx,offsetmess2
int21h
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
movax,0
movbx,0
jmpl0
movdx,offsetmess4
int21h
exit:
MOVAH,02h
MOVDL,0ah
INT21h
MOVDL,0dh
INT21h
movah,4ch
int21h
codeends
endbegin