1、猜数字游戏的设计与实现石家庄铁道大学信息科学与技术学院,张英强一, 问题描述程序运行后自动产生一个随机整数,游戏开始,游戏者根据提示输入数字,系统判断是否为数字,如果是,与随机数进行比较,并给出提示(大,小,正确),如果不是则提示错误,游戏者根据提示再猜数字,直到正确为止。二,流程图:开始产生随机整数键盘输入十进制数Al=0dh ? n y提示错误进位运算Al=09 ? Y N提示大于Cmp bx,a 大于提示小与 小于 等于提示正确结束三,实现分析1,随机数的产生调用dos 中断2C号命令mov ah,2ch ;取系统时间,CH:CL=时间:分钟;DH=秒int 21h2输入数据的结束进位位
2、计算以及判断指令:mov ah,01h int 21h ;调用dos中断如果只用这个命令,只能输入一位十进制数,不能满足需求。指令:and al,0fhmov ah,0xchg ax,bxmov cx,10mul cxadd bx,axjmp input ;进位运算指令运用这些指令键输入的数字进行进位运算。如第一次输入1,再依次循环输入2,则bx=1*10+2,即实现了可以多为输入。但这样就不能停止。指令:cmp al,0dhjz cmper ;与回车进行比较运用此指令,若输入为回车则跳转至比较程序段。指令:cmp al,48jb wrongcmp al,57ja wrong ;判断是否为数字
3、运用此段指令判断键盘输入是否为数字,若不是,则输出提示wrong , input again:,并跳转到键盘输入数据指令。3,比较指令:cmp bx,a ;输入值与随机数比较jb smaller ;小于 cmp bx,a ;大于ja larger cmp bx,a ;等于jz ok用输入的数据(存放于bx中)与随机数(存放于a中:mov a,dx)比较;如果大于,则输出提示larger , input again:,并跳转到键盘输入数据指令;如果小于,则输出提示smaller , input again:,并跳转到键盘输入数据指令;如果等于,则提示正确,并结束。4 源程序data segmen
4、t mess1 db input number:$ mess2 db larger , input again:$ mess3 db smaller , input again:$ mess4 db the number is right!$ mess5 db wrong , input again:$ a dw ? data ends stack segment stack db 20h dup(0)stack endscode segmentassume cs:code,ds:data,ss:stack begin:mov ax,datamov ds,axmov ah,9mov dx,of
5、fset mess1int 21h call printmov ah,2ch ;取当前时间的秒为随机数int 21hmov al,dhmov ah,0mov a,axmov bx,0call zhangmov ah,4chint 21hzhangproc push ax push bx push cxpush dxinput:mov ah,1 ;输入十进制数 int 21h cmp al,0dhjz cmpercmp al,48jb wrongcmp al,57ja wrongand al,0fhmov ah,0xchg ax,bxmov cx,10mul cxadd bx,axjmp inp
6、ut cmper:call printcmp bx,a ;输入值与随机数比较jb smaller ;小于 cmp bx,a ;大于ja larger cmp bx,a ;等于jz ok smaller:mov ah,9mov dx,offset mess3int 21h call printmov ax,0mov bx,0jmp input larger:mov ah,9mov dx,offset mess2int 21h call printmov ax,0mov bx,0 jmp inputwrong:mov ah,9 mov dx,offset mess5int 21h call printmov ax,0mov bx,0 jmp input ok:mov ah,9mov dx,offset mess4int 21h pop dx pop cx pop bx pop ax retprint proc nearmov ah,02h mov dl,0ah int 21h mov dl,0dh int 21hret print endpzhang endpcode ends end begin五,运行结果