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

上传人:yh****1 文档编号:125954869 上传时间:2020-03-21 格式:DOC 页数:20 大小:136.50KB
返回 下载 相关 举报
微机原理汇编语言之猜数字游戏_第1页
第1页 / 共20页
微机原理汇编语言之猜数字游戏_第2页
第2页 / 共20页
微机原理汇编语言之猜数字游戏_第3页
第3页 / 共20页
微机原理汇编语言之猜数字游戏_第4页
第4页 / 共20页
微机原理汇编语言之猜数字游戏_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《微机原理汇编语言之猜数字游戏》由会员分享,可在线阅读,更多相关《微机原理汇编语言之猜数字游戏(20页珍藏版)》请在金锄头文库上搜索。

1、 .猜数字游戏设计文档(源代码是上传文档加上去的,见最后面)一、 需求分析首先,用户输入猜测次数, 游戏开始循环。 数字有四位,格式为: 1234 每次用户输入一个数字,游戏都会显示四个字符: A 代表数字和位置都正确B 代表数字正确, 但是位置不对?代表没有这个数字比如:假如要猜的数字是4321, 用户输入4321, 程序显示AAAA, 用户获胜!假如要猜的数字是4321, 用户输入1234, 程序显示BBBB 假如要猜的数字是4321, 用户输入5674, 程序显示?B 假如要猜的数字是4321, 用户输入5678, 程序显示?如果在给定次数内,用户猜对,则用户胜利,游戏结束;如果在给定的

2、次数里, 用户没有猜到,则用户失败,游戏结束。二、 概要设计采用封装函数的思想,将 生成随机数、比较用户输入结果 分别封装成函数游戏分成四个功能模块1. 生成四个随机数2. 用户输入猜测次数3. 用户猜数4. 显示猜测结果戏总体流程图:开始游戏生成随机数输入游戏次数输入数字判断数字 N游戏次数是否用完输出判断结果 N判断游戏是否成功 failN success输出结果Y游戏结束生成随机数 流程图:生成1个随机数判断是否跟已有随机数重复 重复不重复将随机数保存到S3判断是否生成4个随机数 NY比较输入结果 流程图:判断一个字符是否在系统生成的S3中 N置 ?Y判断是否在对应下标N置 BY置 A判

3、断4个字符是否比较完 NY三、 详细设计1. 输入数字,游戏次数使用DOS功能调用来实现键盘输入。输入单个字符(游戏次数)用1号功能,输入字符串(数字)用9号功能。2. 生成随机数读取时钟数值,进行运算得到随机数。3. 比较结果首先将输入的数字和生成的四位随机数进行比较,按照要求输出判断结果;然后,判断游戏次数是否用完。输出结果按照要求输出结果,分游戏成功和游戏失败两种情况。四、 运行调试源代码:DATA SEGMENTS3 DB 4 DUP(30H), :IS the random number. ,0AH,0DH,$;产生的4个数NUM DB 5,0,5 DUP(?),0AH,0DH,$;

4、输入缓冲区RESULT DB AAAA,0AH,0DH,$GUS DB 4 DUP(30H),0AH,0DH,$;用户输入的4个数S1 DB Please input times from 1 to 9,0AH,0DH,$S2 DB Please input random number,0AH,0DH,$S4 DB Your input is wrong,0AH,0DH,$FAIL DB You have no time, You lost the game!,0AH,0DH,$WIN DB Congratulations! You succeed!,0AH,0DH,$DATA ENDSSTA

5、CK1 SEGMENT PARA STACK DB 10 DUP(0)STACK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG, DS:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,S3 CALL RANDOM;调用封装的函数RANDOM产生随机数;-显示系统生成的4个随机数- ;MOV DX,OFFSET S3 ;MOV AH,09H ;INT 21H;-提示输入猜测次数,并保存在BL- MOV DX,OFFSET S1 MOV AH,09H INT 21H MOV AH,01H;输入次数 INT 21H SUB

6、AL,30H MOV BX,0 MOV BL,AL;猜测次数入BL MOV AH,02H;回车换行 MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H;-用户猜测- GUESS: PUSH BX CALL COMPARE;调用封装函数,将比较结果保存在GUS POP BX LEA DX,GUS;显示猜测结果 MOV AH,09H INT 21H LEA SI,RESULT;判断是否完全相同 LEA DI,GUS MOV CX,4 REPZ CMPSB JE OUT1;完全相同,转OUT1 DEC BL;猜错,则猜测次数减1 JNZ OUT2 LEA

7、 DX, FAIL;次数为0,失败信息 MOV AH,09H INT 21H JMP OVEROUT1:;输出获胜信息 LEA DX,WIN MOV AH,09H INT 21H JMP OVEROUT2:;提示重新输入随机数 MOV DX,OFFSET S4 MOV AH,09H INT 21H JMP GUESSOVER:MOV AH,4CH INT 21H;-封装函数RANDOM,产生4个不同随机数,并保存在S3-RANDOM PROC PUSH CX PUSH DX PUSH AX STI MOV BH,4RAND:;产生一个随机数 MOV AH,0 INT 1AH;读时钟计数器值,1

8、6位放在DX MOV AX,DX MOV BL,73 MUL BL AND AH,9;清高6位 MOV DL,10 DIV DL;除10,产生09余数 ADD AH,30H MOV BL,AH;余数存BX,作随机数 JMP X1X1:;使生成的随机数不重复 MOV CL,4 LEA DI,S3 MOV AL,BL CLD;清DF,每次扫描后指针增量 REPNZ SCASB;直到找到相同随机数或CX=0 JZ RAND;若找到相同的,则重新生成随机数 JMP X2;没找到X2:;随机数入字符串 MOV SI,BL INC SI DEC BH JNZ RAND POP AX POP DX POP

9、CX RETRANDOM ENDP;-封装的函数COMPARE,根据用户输入的随机数,把比较结果保存在GUS中-COMPARE PROC PUSH CX PUSH DX PUSH AX STI;猜数初始化 MOV DX,OFFSET S2;提示用户输入4个数 MOV AH,09H INT 21H LEA DX,NUM;用户输入4个数 MOV AH,0AH INT 21H LEA SI,NUM+2;缓冲区随机数入GUS LEA DI,GUS MOV CX,4 REP MOVSB MOV AH,02H ;回车换行 MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH I

10、NT 21H LEA SI,GUS MOV BX,SI MOV DL,4;DL为当前未比较的随机数个数FOUND1:;判断一个随机数是否在S3中,不在则置? MOV CX,4 LEA DI,S3;每次循环都会重置 MOV AL,SI;一个随机数送AL CLD REPNZ SCASB;扫描字符串S3,直到找到随机数或CX=0 JZ FOUND2;在S3中,转FOUND2 MOV AL,? MOV SI,AL JMP TEMPFOUND2:;判断关键字是否在对应下标位置,不在则置B MOV CX,SI SUB CX,BX LEA BP,S3 DEC DI SUB DI,BP CMP DI,CX JZ FOUND3;在对应位置,转FOUND3 MOV AL,B;不在对应位置 MOV SI,AL JMP TEMPFOUND3:;置A MOV AL,A MOV S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 设计及方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号