1、汇编语言猜数字课程设计汇编语言课 程 设 计题 目: 专业班级: 姓 名:_ 学 号: 摘 要随着计算机技术的普及及其向其他学科的快速渗透浅显的计算机技术已经普遍不能适应当今的形势,这在就业以及进入新的工作方面,就更加突出。汇编语言是一种面向CPU指令系统的程序语言,它采用指令系统的助记符来表示操作码和操作数,用符号地址表示操作数地址。本程序主要由汇编语言相关知识编写而成。关键词:汇编语言;猜数字;指令系统;游戏 AbstractWith the popularity of computer technology and the rapid penetration of other disci
2、plines plain computer technology has generally not adapt to todays situation, which in employment and access to the new work, the more prominent. CPU-oriented assembly language is a language instruction program, which uses the system to represent the mnemonic instruction opcodes and operands, said o
3、perand address with symbolic addresses. This program is mainly guessing game written in assembly language knowledge together.Keywords: assembly language; guessing; instruction; games目 录1.概述 11.1题目描述 11.2功能简介 12.系统总体设计 12.1系统总体分析 12.2程序设计流程图 23.详细的算法描述 33.1随机数的产生 33.2 从键盘输入数据 33.3 数据的比较 33.4 其他指令 34.
4、调试分析 44.1运行方法 44.2程序运行界面 44.2.1程序开始界面 44.2.2程序进行比较 54.2.3.得出结果 55.使用说明 66.总结 7参 考 文 献 8致 谢 9源程序 101.概述 1.1题目描述设计一个猜数字的游戏,程序运行后自动产生一个1100之间的随机整数。游戏开始后,程序根据游戏者输入的数字与所需猜测数字进行比较并给出响应,游戏者根据程序给出的响应再次猜数字,最后得到正确数字。程序应有相应的操作、输入和输出提示。1.2功能简介本程序作为一个猜字游戏软件,以QASM作为软件开发环境,利用随机函数通过数字比较,编程实现了一个在DOS下运行的猜数字游戏软件。首先通过指
5、令在程序中产生随机数,由键盘输入的数字与其比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,则直接退出。2.系统总体设计首先通过指令在程序中产生随机数,由键盘输入的数字与其比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,则直接退出。根据需求分析的结果,本系统至少有以下模块:产生随机数模块、输入模块、比较模块、提示模块。2.1系统总体分析该课程设计的特点在于程序运行后产生随机数的过程比
6、较巧妙。它是调用了BIOS功能调用的1AH号中断,读取系统时钟。然后进行除法运算得到余数,再进行加法运算得到符合要求的随机数。此课程设计的另外一个特点是定义了多个子程序,将各功能模块化,便于在调试过程中查找错误和修改,不会影响其他模块。各模块功能说明如下:产生随机数模块的主要功能是程序运行后自动产生一个1100之间的随机整数。输入模块的主要功能是实现从键盘输入用户所猜测的数据。比较模块的主要功能是用输入的数据与随机数比较。提示模块的主要功能是经过比较后提示用户输入数据与随机数的差距。2.2程序设计流程图根据上述分析,该系统的程序流程图如下图所示: 图2.1 程序设计流程图 3.详细的算法描述3
7、.1随机数的产生通过查找各种资料知,随机数的产生也是一种算法,通过种子数据,计算出不同的随机数。但,此次试验,我通过对系统当前时间的提取来表示随机数,即用时间中的“秒”来作这个随机数。指令为:mov ah,2ch ;取系统时间,CH:CL=时间:分钟;DH=秒int 21h3.2 从键盘输入数据如果仅用指令:mov ah,01h Int 21h来从键盘读取数据,则只能取一个字符,即,只能读取一位数字;在试验中通过反复调试,可以对每次输入的数(存放于al中)与“回车”的ASCII比较,如果不是“回车”,则返回继续输入;如果是回车,则跳出,完成数据的输入。每一次返回继续输入时,原来的al中的数据要
8、以个位加入到bx中,即,bx=bx*10+al;这样可以保证输入的数据不会丢失。3.3 数据的比较用输入的数据(存放于bx中)与随机数(存放于a中:mov a,dx)比较;如果大于,则输出提示数据太大,请重新输入,并跳转到键盘输入数据指令;如果小于,则输出提示数据太小,请重新输入,并跳转到键盘输入数据指令;如果等于,则提示正确,并结束。其中,小于跳转用jb;大于跳转用ja;等于用jz。3.4 其他指令回车换行指令:为了保持程序输出结果的工整性,多用回车换行指令:MOV AH,02h MOV DL,0ah INT 21h MOV DL,0dh INT 21h输出提示性语句指令:为使程序输出界面更
9、互动化,常用提示性语句如:MOV AH,9 MOV DX,OFFSET mess2 MOV 21h退出语句:使用该语句退出整个程序:MOV AH,4CH INT 21H4.调试分析4.1运行方法masm 01.asm Link 01 014.2程序运行界面4.2.1程序开始界面1)本程序的运行环境为DOS操作系统。2)进入演示程序后,即显示主菜单界面。3)程序启动后产生随机数,系统给出提示要求用户输入数据,如图所示: 图4.1 程序开始界面4.2.2程序进行比较由键盘输入的数字与随机数比较,如果大于随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数太小,请重新输入;如果输入
10、的数不是十进制数,则直接退出,如图所示: 图4.2 程序比较提示界面4.2.3.得出结果PLEASE INPUT YOUR NUMBER:13YOUR NUMBER IS SMALLER,PLEASE CHANGE YOUR NUMBER:30YOUR NUMBER IS SMALLER,PLEASE CHANGE YOUR NUMBER:50YOUR NUMBER IS SMALLER,PLEASE CHANGE YOUR NUMBER:60YOUR NUMBER IS LARGER,PLEASE CHANGE YOUR NUMBER:55YOUR NUMBER IS LARGER,PLEA
11、SE CHANGE YOUR NUMBER:51YOUR NUMBER IS SMALLER,PLEASE CHANGE YOUR NUMBER:52YOUR NUMBER IS SMALLER,PLEASE CHANGE YOUR NUMBER:53THATS the right number!用户输入的数字与随机数比较,当与随机数相等时输出THATS the right number!。如图所示: 图4.3 程序得出结果界面5.使用说明1)程序经过汇编、链接运行后,屏幕上将显示猜数字游戏的主菜单。如下如下示:Pleaseinputyournumber:玩家在键盘输入数字开始游戏。2) 在一
12、次游戏中,玩家只能输入数字,若输入字母或符号,则自行退出游戏。如果玩家猜中数字,则游戏给出提示信息“Thatstherightnumber!”3) 如果玩家再一次游戏结束后想接着玩,则需重新运行游戏,如果玩家不想接着玩,则直接关闭就可退出游戏。6.总结通过这次课程设计,我重温了本学期所学的知识,认识到了自己在学习方面的缺陷和不足。我个人认为本次试验的最大难点就是产生随机数,然而通过查询,发现汇编中产生随机数的命令都很复杂,并且有些命令是我没有见过的,经过多次考虑,还是选择了使用秒针随机选中的数据作为随机数。这或许是一个特点,也是一个不足!通过这次的课程设计,让我重温了一遍汇编语言的知识。重新熟
13、悉了各种汇编指令。特别是对于算法思想有了一定的提高,各种汇编指令的小技巧,数据各种各样的操作指令序列让我感觉到,汇编语言也能够越学越让人沉入,容易让人感到成功的喜悦!虽然程序已经写完,但是还是遗憾不能够弄懂真正的随机数是怎样产生的;另外,也因为这个程序小了点,所以没有用子程序的方法,我想如果加大程序,还是用子程序的方法会显得条理更加清楚明白。参 考 文 献1钱晓捷.汇编语言程序设计M.北京:电子工业出版社,2012.6.2沈美明温冬婵等.IBM-PC汇编语言程序设计M.北京.清华大学出版社,2001.8。3詹仕华等.汇编语言程序设计M.北京:中国电力出版社,2008.2.4詹仕华等.汇编语言程
14、序设计习题解答及课程实验、设计辅导M.北京:中国电力出版社,2008.2.5王爽.汇编语言M.北京:清华大学出版社2003.5.6曹加恒等.新一代汇编语言课程设计M.北京:高等教育出版社,2003.6.7杨路明等.汇编语言程序设计M.长沙:中南大学出版社,2005.8.致 谢在本次课程设计中,我非常感谢在我遇到问题时耐心给我讲解和解决问题的老师和同学们。在老师的帮助下我不但完成了课程设计,而且也学到了很多知识,让我掌握了学习方法。同学之间的帮助,相互鼓励,以及相互探讨,给了我很大的信心,以及跨越式的进步。在课程设计即将完成之际,回顾紧张但又充实的制作过程,我在此向所有关心我的及帮助我的老师和同
15、学们致以最真诚的感谢。源程序:data SEGMENT mess1 db Please input your number:$ mess2 db Your number is larger,please change your number:$ mess3 db Your number is smaller,please change your number:$ mess4 db Thats the right number!$ a dw ?data ENDScode SEGMENT assume cs:code,ds:data begin: mov ax,data mov ds,ax mov
16、 ah,9 int 21h MOV AH,02h MOV DL,0ah INT 21h MOV DL,0dh INT 21h mov ah,2ch ;取当前时间的秒为随机数 int 21h mov al,dh mov a,ax mov bx,0 l0:MOV AH,1 ;输入十进制数 INT 21h CMP AL,0dh JZ l4 cmp al,48 jb exit cmp al,57 ja exit AND AL,0fh MOV AH,0 XCHG AX,BX MOV CX,10 MUL CX ADD BX,AX JMP l0 l4: MOV AH,02h MOV DL,0ah INT 2
17、1h MOV DL,0dh INT 21h cmp bx,a ;输入值与随机数比较 jb l1 ;小于 cmp bx,a ;大于 ja l2 cmp bx,a ;等于 jz l3 l1:mov ah,9 mov dx,offset mess3 int 21h MOV AH,02h MOV DL,0ah INT 21h MOV DL,0dh INT 21h mov ax,0 mov bx,0l2:mov ah,9 mov dx,offset mess2 int 21h MOV AH,02h MOV DL,0ah INT 21h MOV DL,0dh INT 21h mov ax,0mov bx,0jmp l0 mov dx,offset mess4 int 21hexit:MOV AH,02h MOV DL,0ah INT 21h MOV DL,0dh INT 21h mov ah,4ch int 21hcode ends end begin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1