汇编语言:猜数字游戏的设计与实现

别妄想泡我
843次浏览
2021年01月01日 02:58
最佳经验
本文由作者推荐

qq新版本-变更公司地址

2021年1月1日发(作者:甘风子)


武汉理工大学《汇编语言程序设计》课程设计说明书
猜数字游戏的设计与实现
1 需求说明或问题描述
1.1 问题描述
程序运行后自动产生一个1~100之 间的随机整数,游戏开始,程序根据游戏
者输入的数字与所需猜测数字进行比较,并给出响应,游戏者根 据程序响应再猜
数字,最后得到正确数字。
1.2 需求说明
程序应有操作提示, 输入和输出,界面追求友好,最好是菜单式的界面。设
计若干用例(测试数据),上级测试程序并分析( 评价)所设计的程序。
2 设计说明
2.1 简要设计框图如下:

2.2 简要分析思想
首先通过指令在程序中产生随机数,由键盘输入的数字与其比较,如果 大于
随机数,则提示输入的数太大,请重新输入;如果小于随机数,则提示输入的数
太小,请重 新输入;如果等于随机数,则提示正确;如果输入的数不是十进制数,
则直接退出。
3 详细的算法描述
3.1随机数的产生

1


武汉理工大学《汇编语言程序设计》课程设计说明书
通过查找各种资料知,随 机数的产生也是一种算法,通过种子数据,计算出
不同的随机数。但,此次试验,我通过对系统当前时间 的提取来表示随机数,即
用时间中的“秒”来作这个随机数。
指令为:
mov ah,2ch 取系统时间,CH:CL=时间:分钟;DH=秒
int 21h
3.2 从键盘输入数据
如果仅用指令:mov ah,01h
Int 21h
来从键盘读取数据,则只能取一个字符,即,只能读取一位数字;在试验中
通 过反复调试,可以对每次输入的数(存放于al中)与“回车”的ASCII比较,
如果不是“回车”, 则返回继续输入;如果是回车,则跳出,完成数据的输入。
每一次返回继续输入时,原来的al中的数 据要以个位加入到bx中,即,
bx=bx*10+al;这样可以保证输入的数据不会丢失。
3.3 数据的比较
用输入的数据(存放于bx中)与随机数(存放于a中:mov a,d x)比较;
如果大于,则输出提示数据太大,请重新输入,并跳转到键盘输入数据指令;如
果小 于,则输出提示数据太小,请重新输入,并跳转到键盘输入数据指令;如果
等于,则提示正确,并结束。
其中,小于跳转用jb;大于跳转用ja;等于用jz。
3.4 其他指令
回车换行指令:
为了保持程序输出结果的工整性,多用回车换行指令:




MOV AH,02h
MOV DL,0ah
INT 21h
MOV DL,0dh
INT 21h
输出提示性语句指令:
为使程序输出界面更互动化,常用提示性语句如:






MOV AH,9
MOV DX,OFFSET mess2
MOV 21h
退出语句:
使用该语句退出整个程序:


MOV AH,4CH
INT 21H
4 源程序与执行结果(含测试方法和测试结果)
4.1 源程序

2


武汉理工大学《汇编语言程序设计》课程设计说明书
data SEGMENT
mess1 db input your
number:$$
mess2 db number is
larger,please change your number:$$
mess3 db number is
smaller,please change your number:$$
mess4 db the right
number!!!$$
a dw ?
data ENDS

code SEGMENT
assume cs:code,ds:data
begin:
mov ax,data
mov ds,ax

mov ah,9
mov dx,offset mess1
int 21h
MOV AH,02h
MOV DL,0ah
INT 21h
MOV DL,0dh
INT 21h
mov ah,2ch 取当前时间的秒为
随机数
int 21h
mov al,dh
mov ah,0
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 21h
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,0
jmp l0

l2:mov ah,9
mov dx,offset mess2
int 21h
MOV AH,02h
MOV DL,0ah
INT 21h
MOV DL,0dh
INT 21h
mov ax,0
3


武汉理工大学《汇编语言程序设计》课程设计说明书
mov bx,0
jmp l0

l3:mov ah,9
mov dx,offset mess4
int 21h
exit:MOV AH,02h
MOV DL,0ah
INT 21h
MOV DL,0dh
INT 21h
mov ah,4ch
int 21h
code ends
end begin

4.2 执行结果
4.2.1 执行方法:…>masm
…>Link 01
…>01
4.2.2 结果:
结果1:(正确)
G:masm>01
Please input your number:
55
Your number is larger, please change your number:
25
Your number is smaller, please change your number:
40
Your number is larger, please change your number:
30
Your number is smaller, please change your number:
35
Your number is smaller, please change your number:
37
That's the right number!!!
结果2:(输入错误)
G:masm>01

4


武汉理工大学《汇编语言程序设计》课程设计说明书
Please input your number:
12
Your number is smaller,please change your number:
32
Your number is larger,please change your number:
45u(输入了非数字符号“u”)
G:masm>

5 总结
设计心得
特点:
我个人认为本次试验的最大难点就是产生随机数,然而通过查询, 发现汇编
中产生随机数的命令都很复杂,并且有些命令是我没有见过的,经过多次考虑,
还是选 择了使用秒针随机选中的数据作为随机数。这或许是一个特点,也是一个
不足!

不足:
虽然对汇编的基本指令格式印象深刻,但是,还是忘记了一些老师上课讲过
的 指令方法。比如说,十进制数字的输入,特别是输出,虽然本次实验没有输出
十进制数,但是仔细回想一 下的话,对我也是一个考验。另外,对各种int 21h
的指令依然记得不甚牢靠,需要查找资料等。

收获与体会:
通过这次的课程设计,让我重温了一遍汇编语言的知识。重新熟悉了 各种汇
编指令。特别是对于算法思想有了一定的提高,各种汇编指令的小技巧,数据各
种各样的 操作指令序列让我感觉到,汇编语言也能够越学越让人沉入,容易让人
感到成功的喜悦!

展望:
虽然程序已经写完,但是还是遗憾不能够弄懂真正的随机数是怎样产生的;
另 外,也因为这个程序小了点,所以没有用子程序的方法,我想如果加大程序,
还是用子程序的方法会显得 条理更加清楚明白。
如果将题目中的数据改成浮点型,即会有小数产生,那么这个程序有改怎么
写,其中,小数的输入,小数的随机取值,这些都是会遇到的问题!

5

公务员条例-大学生活动


似的拼音-范文正公轻财好施


童真年代-个人简历模板word版


小学语文研修总结-寺庙对联


烈火青春吧-时光老人


髀肉复生-月到中秋分外圆


劳-校园安全手抄报内容


垃圾填埋-减少的反义词