汇编报告.docx
《汇编报告.docx》由会员分享,可在线阅读,更多相关《汇编报告.docx(14页珍藏版)》请在冰点文库上搜索。
![汇编报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/19/ccdeb48f-15dd-417d-8178-fd176a789ba0/ccdeb48f-15dd-417d-8178-fd176a789ba01.gif)
汇编报告
一、摘要
(1)课题
先通过密码登录游戏,然后进行21点游戏
Firstusingapasswordtolandthegame,andthenplaytheBLACEJACKgame.
(2)原理
在实验过程中,由于本程序含有大量的数字、字符需要输出,对数据输出也需要适当定位,如果多次调用DOS中断和BIOS中断,必然造成代码的冗余,为了解决这一问题,我搜寻相关资料,发现运用宏汇编来进行编写可以有效消除代码冗余,提高可读性,所以在编写代码时也运用到了此种方式,但是在使用宏汇编的时候需要进行现场保护。
在实验中,我也遇到诸多问题:
汇编语言不像高级语言一样提供随机函数来调用,如何实现随机数的生成便成为一个大问题,经过相关资料的查询,我了解到利用8253芯片产生随机数只需要很少的代码语句,此程序便采用了8253芯片。
Duringtheexperiment,sincetheprogramcontainsalargenumberofdigitalcharactersneedtooutput,outputofdataneedtobeappropriatelypositioned,ifmultiplecallstoDOSinterruptandBIOSinterrupt,willinevitablyresultinthecoderedundancy,inordertosolvethisproblem,Isearchrelevantinformation,foundthattheuseofamacroassemblertowriteeffectivelyeliminatecoderedundancy,improvereadability,sousetowritecodethisway,butneedtousemacroassemblerprotectedsite.Intheexperiments,Ihaveencounteredmanyproblems:
assemblylanguage,unlikethehigh-levellanguage,likerandomfunctiontocall,howtoachievearandomnumbergenerationhasbecomeabigproblem,Ilearnedtotakeadvantageofthe8253chiptogeneraterandominformationquerynumberrequiresverylittlecodestatements,thisprogramwillbeusingthe8253chip.
(3)结果
当输入了正确的密码才能进入游戏界面,否则将提示“PermissionDenied”;
然后即可进行游戏,在游戏前会要求输入赌注,每轮游戏结束时会提示“OnceAgain?
”,即可选择是否进行下一轮游戏。
Whenyouenterthecorrectpasswordtoenterthegameinterface,otherwiseyouwillbepromptedto"PermissionDenied";Youcanthenplaythegame,willbeaskedtoenterthestakesinthegamebeforetheendofeachroundofthegamewillbepromptedto"OnceAgain?
",Youcanchoosewhetherthenextroundofgames.
二、正文
(1)绪论
本程序第一阶段将要求输入密码,密码错误则显示无法进入,只有密码正确才能够进入21点游戏。
21点游戏的规则如下:
每张牌都有点数,A到10的牌的点数就是其牌面的数字;J、Q、K的点数是10,玩家有基础分100分,可以输入不大于100的两位数作为赌注。
游戏开始时,玩家和电脑首先获得一张牌,玩家可以重复选择是否继续抽牌,一旦牌总点数超过21点则判此轮比赛为输,减去相应赌注分值;当玩家选择不再抽牌时,换电脑玩家抽牌,同样,当总点数大于21点时,玩家获得相应分值;若当两玩家总点数都不大于21点时,比较两人点数之和大小,即比较哪个玩家的总点数更加靠近21点来判别输赢,若总点数相等,则双方既不得分也不失分,否则点数大的一方获得分值,点数小的则失去分值,直到玩家失去所有赌注,游戏结束。
(2)概要
本程序总体分为两大部分,第一部分是登陆游戏程序段,第二部分则是21
点游戏程序设计部分。
在登陆游戏程序段部分目的在于区分用户对象,本游戏程序只针对拥有密码的用户开放使用,只有输入密码正确才能够进行下一步操作;而对于不拥有密码的用户不开放使用,当用户输入密码错误时,显示拒绝访问,并要求重新输入密码才能够进行游戏。
登陆程序段作为子程序在主程序开始时进行调用。
在游戏主程序部分,以顺序执行为主,伴有子程序的调用。
游戏开始时,玩家输入不超过100的两位数分值作为赌注,然后随机给玩家各发放一张底牌,电脑玩家的底牌隐藏不显示。
随后玩家根据底牌选择是否继续抽牌,当牌面总点数超过21点时则为输,否则换电脑玩家抽牌,当电脑玩家抽完一张牌后,其总点数同玩家总点数作比较,当点数相等时,显示分值相等;当小于时,继续抽牌,再次同玩家总点数相比较;当大于时,若电脑总点数超过21点,则电脑输,否则,表示电脑玩家总点数更加靠近21点且大于玩家总点数,则电脑赢玩家输。
最后回显隐藏牌面,并显示当前玩家分数以及提示是否进行下一轮游戏。
在玩家输入分值作为赌注时,若其分值不够,则作出相应提示,当玩家分值为0时,玩家则不能够继续游戏,游戏自动退出。
(3)详细设计
1、
登陆游戏:
说明:
本游戏只针对授权用户开放使用,不知道密码的用户无法进行正常游戏。
此程序段首先统计用户输入字符数目,若同预置密码不相同则重新输入,然后使用指针的方式对用户输入的每个字符同起先设置的密码进行一位一位的比较,如果全部相同,则输入密码正确,进入游戏,否则,密码错误,重新跳出登陆界面。
2、游戏程序:
(1)输入赌注
说明:
在输入赌注时,由于基础分只有100分,所以只能输入小于100的两位数,若要输入个位分值,则最前面需要补0,并且所输入的分值不能超过当前分值,当输入的分值大于当前分值时,会跳出提示并显示当前所拥有的分值来提醒玩家所能输入最大分值,以便再次输入赌注,只有在合法的输入情况下,才能正常进行游戏。
(2)发牌及比较过程
说明:
当任何一方的总牌点数大于21点则此轮比赛为输。
玩家可以选择是否继续抽取牌面来增加自己的总牌面和,当玩家选择不再继续抽取牌时,换电脑玩家进行抽牌。
在本程序中给电脑制订如下规则:
当电脑总牌面和小于玩家总牌面和时,则继续抽取牌面,直到总牌面和大于等于玩家总牌面和,当两玩家牌面和相等时,则显示点数相等,双方既不得分也不失分,当电脑玩家总牌点数大于玩家总牌点数且小于21点时,则电脑赢,玩家失去相应赌注分值,当电脑玩家总牌点数大于21点时,则玩家赢,玩家获得相应赌注分值。
在本游戏中,电脑玩家不设置基础分,即只有当玩家失去所有赌注或自主选择退出时,游戏才终止。
在退出游戏时,将显示相关字符感谢玩家使用本游戏,而当玩家失去所有分值时,也将告知玩家本次比赛已失去所有分,比赛为输。
完整程序流程图如下:
(4)运行结果
图1:
登陆界面
图2:
密码输入错误,提示没有权限
图3:
密码输入正确,进入游戏界面
图4:
输入游戏赌注
图5:
游戏开始
图6:
显示胜负,并提示是否进入下一轮
图7:
提示分值不够
图8:
游戏结束
3、附录(原程序清单)