微机原理汇编语言之猜数字游戏.docx

上传人:b****8 文档编号:10667541 上传时间:2023-02-22 格式:DOCX 页数:14 大小:262.15KB
下载 相关 举报
微机原理汇编语言之猜数字游戏.docx_第1页
第1页 / 共14页
微机原理汇编语言之猜数字游戏.docx_第2页
第2页 / 共14页
微机原理汇编语言之猜数字游戏.docx_第3页
第3页 / 共14页
微机原理汇编语言之猜数字游戏.docx_第4页
第4页 / 共14页
微机原理汇编语言之猜数字游戏.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

微机原理汇编语言之猜数字游戏.docx

《微机原理汇编语言之猜数字游戏.docx》由会员分享,可在线阅读,更多相关《微机原理汇编语言之猜数字游戏.docx(14页珍藏版)》请在冰豆网上搜索。

微机原理汇编语言之猜数字游戏.docx

微机原理汇编语言之猜数字游戏

猜数字游戏设计文档

(源代码是上传文档加上去的,见最后面)

一、需求分析

首先,用户输入猜测次数,游戏开始循环。

数字有四位,格式为:

1234

每次用户输入一个数字,游戏都会显示四个字符:

A代表数字和位置都正确

B代表数字正确,但是位置不对

代表没有这个数字

比如:

假如要猜的数字是4321,用户输入4321,程序显示AAAA,用户获胜!

假如要猜的数字是4321,用户输入1234,程序显示BBBB

假如要猜的数字是4321,用户输入5674,程序显示?

?

?

B

假如要猜的数字是4321,用户输入5678,程序显示?

?

?

?

如果在给定次数内,用户猜对,则用户胜利,游戏结束;

如果在给定的次数里,用户没有猜到,则用户失败,游戏结束。

二、概要设计

采用封装函数的思想,将生成随机数、比较用户输入结果分别封装成函数

游戏分成四个功能模块

1.生成四个随机数

2.用户输入猜测次数

3.用户猜数

4.显示猜测结果戏

总体流程图:

 

 

N

 

N

 

fail

N

 

success

Y

 

生成随机数流程图:

 

重复

 

不重复

 

N

 

Y

 

比较输入结果流程图:

 

N

 

Y

 

N

 

Y

 

N

 

Y

 

三、详细设计

1.输入数字,游戏次数

使用DOS功能调用来实现键盘输入。

输入单个字符(游戏次数)用1号功能,输入字符串(数字)用9号功能。

2.生成随机数

读取时钟数值,进行运算得到随机数。

3.比较结果

首先将输入的数字和生成的四位随机数进行比较,按照要求输出判断结果;然后,判断游戏次数是否用完。

输出结果

按照要求输出结果,分游戏成功和游戏失败两种情况。

四、运行调试

 

源代码:

DATASEGMENT

S3DB4DUP(30H),':

IStherandomnumber.',0AH,0DH,'$';产生的4个数

NUMDB5,0,5DUP(?

),0AH,0DH,'$';输入缓冲区

RESULTDB'AAAA',0AH,0DH,'$'

GUSDB4DUP(30H),0AH,0DH,'$';用户输入的4个数

S1DB'Pleaseinputtimesfrom1to9',0AH,0DH,'$'

S2DB'Pleaseinputrandomnumber',0AH,0DH,'$'

S4DB'Yourinputiswrong',0AH,0DH,'$'

FAILDB'Youhavenotime,Youlostthegame!

',0AH,0DH,'$'

WINDB'Congratulations!

Yousucceed!

',0AH,0DH,'$'

DATAENDS

STACK1SEGMENTPARASTACK

DB10DUP(0)

STACK1ENDS

COSEGSEGMENT

ASSUMECS:

COSEG,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

LEASI,S3

CALLRANDOM;调用封装的函数RANDOM产生随机数

;-------显示系统生成的4个随机数--------

;MOVDX,OFFSETS3

;MOVAH,09H

;INT21H

;-------提示输入猜测次数,并保存在BL--------

MOVDX,OFFSETS1

MOVAH,09H

INT21H

MOVAH,01H;输入次数

INT21H

SUBAL,30H

MOVBX,0

MOVBL,AL;猜测次数入BL

MOVAH,02H;回车换行

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

;--------------用户猜测---------------

GUESS:

PUSHBX

CALLCOMPARE;调用封装函数,将比较结果保存在GUS

POPBX

LEADX,GUS;显示猜测结果

MOVAH,09H

INT21H

LEASI,RESULT;判断是否完全相同

LEADI,GUS

MOVCX,4

REPZCMPSB

JEOUT1;完全相同,转OUT1

DECBL;猜错,则猜测次数减1

JNZOUT2

LEADX,FAIL;次数为0,失败信息

MOVAH,09H

INT21H

JMPOVER

OUT1:

;输出获胜信息

LEADX,WIN

MOVAH,09H

INT21H

JMPOVER

OUT2:

;提示重新输入随机数

MOVDX,OFFSETS4

MOVAH,09H

INT21H

JMPGUESS

OVER:

MOVAH,4CH

INT21H

;----------封装函数RANDOM,产生4个不同随机数,并保存在S3----------

RANDOMPROC

PUSHCX

PUSHDX

PUSHAX

STI

MOVBH,4

RAND:

;产生一个随机数

MOVAH,0

INT1AH;读时钟计数器值,16位放在DX

MOVAX,DX

MOVBL,73

MULBL

ANDAH,9;清高6位

MOVDL,10

DIVDL;除10,产生0~9余数

ADDAH,30H

MOVBL,AH;余数存BX,作随机数

JMPX1

X1:

;使生成的随机数不重复

MOVCL,4

LEADI,S3

MOVAL,BL

CLD;清DF,每次扫描后指针增量

REPNZSCASB;直到找到相同随机数或CX=0

JZRAND;若找到相同的,则重新生成随机数

JMPX2;没找到

X2:

;随机数入字符串

MOV[SI],BL

INCSI

DECBH

JNZRAND

POPAX

POPDX

POPCX

RET

RANDOMENDP

;-----封装的函数COMPARE,根据用户输入的随机数,把比较结果保存在GUS中--------

COMPAREPROC

PUSHCX

PUSHDX

PUSHAX

STI

;猜数初始化

MOVDX,OFFSETS2;提示用户输入4个数

MOVAH,09H

INT21H

LEADX,NUM;用户输入4个数

MOVAH,0AH

INT21H

LEASI,NUM+2;缓冲区随机数入GUS

LEADI,GUS

MOVCX,4

REPMOVSB

MOVAH,02H;回车换行

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

LEASI,GUS

MOVBX,SI

MOVDL,4;DL为当前未比较的随机数个数

FOUND1:

;判断一个随机数是否在S3中,不在则置‘?

MOVCX,4

LEADI,S3;每次循环都会重置

MOVAL,[SI];一个随机数送AL

CLD

REPNZSCASB;扫描字符串S3,直到找到随机数或CX=0

JZFOUND2;在S3中,转FOUND2

MOVAL,'?

'

MOV[SI],AL

JMPTEMP

FOUND2:

;判断关键字是否在对应下标位置,不在则置‘B’

MOVCX,SI

SUBCX,BX

LEABP,S3

DECDI

SUBDI,BP

CMPDI,CX

JZFOUND3;在对应位置,转FOUND3

MOVAL,'B';不在对应位置

MOV[SI],AL

JMPTEMP

FOUND3:

;置A

MOVAL,'A'

MOV[SI],AL

JMPTEMP

TEMP:

;猜测循环判断和输出猜测结果

INCSI

DECDL

CMPDL,0

JNZFOUND1;若4个随机数未比较完,转FOUND1

POPAX

POPDX

POPCX

RET

COMPAREENDP

COSEGENDS

ENDSTART

 

Welcome!

!

!

欢迎您的下载,

资料仅供参考!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1