发布时间 : 星期四 文章汇编语言:猜数字游戏的设计与实现更新完毕开始阅读70546a3543323968011c92a2
武汉理工大学《汇编语言程序设计》课程设计说明书
猜数字游戏的设计与实现
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,dx)比较;如果大于,则输出提示数据太大,请重新输入,并跳转到键盘输入数据指令;如果小于,则输出提示数据太小,请重新输入,并跳转到键盘输入数据指令;如果等于,则提示正确,并结束。
其中,小于跳转用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 01.asm …>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