武汉理工大学《微机原理与接口技术》课程设计说明书i目录摘要.......................................................................11.概述..........................................................21.1课程设计任务..........................................................21.2开发环境..............................................................22任务分析.......................................................22.1程序的功能............................................................22.2输入输出要求..........................................................33功能及程序设计.................................................34各子程序设计...................................................44.1各模块的详细算法......................................................44.1.1扑克牌的绘制...................................................44.1.2随机数的生成...................................................54.1.3计算表达式.....................................................74.2总的流程图...........................................................105调试分析......................................................116心得体会......................................................13参考文献........................................................15武汉理工大学《微机原理与接口技术》课程设计说明书1摘要汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。汇编语言也是面向机器的程序设计语言。在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。使用汇编语言编写的程序,机器不能直接识别。汇编程序把汇编语言翻译成机器语言的过程称为汇编汇。本次课程设计设计思路思路找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法。依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。用所学的汇编语言知识编写一个能实现在屏幕随机显示三张牌,并计算其能否组成24点。不能就显示无解。关键字:汇编语言,24点,中断调用武汉理工大学《微机原理与接口技术》课程设计说明书224点游戏程序设计1.概述1.1课程设计任务(1)屏幕上随机显示3张牌(花色,底色,方框);(2)运算规则:数字2~9作为数字,J、Q、K和A可以作10参与运算,也可以当作0参与运算;(3)自动部分:能计算出这3张牌的加、减、乘或除的结果为24点,每张牌只能用一次,如果没有答案,则显示noanswer。(4)撰写设计说明书及调试心得。1.2开发环境为了运行汇编语言程序,必须保证所用磁盘上有以下编辑程序:Masm.exeLink.exeDebug.exeMasm为宏汇编程序,负责对源文件进行汇编;link为连接程序,把汇编后产生的目标模块连接在一起,产生可执行文件;debug是调试程序,它是调试汇编语言程序必不可少的工具。2任务分析2.1程序的功能程序运行后产生3个扑克牌,对应3个整数,花牌既能当10也能当0使用。其中每个数字只能使用一次;任意使用+-*/(),构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏。该程序直接产生3张随机的扑克牌,通过键盘可以选择是否再选两张,继而将这几张牌转换为对应的数让程序进行检测看能否算得24点,存在有就在屏幕上显示结果。程序控制分为自动与手动两种,可以通过键盘输入‘A’,计算机能够根据四则运算规则,计算3张牌相互运算后的结果。通过键盘输入‘H’,能手动输入武汉理工大学《微机原理与接口技术》课程设计说明书3运算过程,来达到计算目标。若结果为24,则屏幕下方显示‘^-^RIGHT^-^',反之,显示‘):WRONG:('。如果不存在就显示“noanswer”。2.2输入输出要求依据屏幕显示提示语句,通过键盘输入控制选牌指令来开始选牌,当牌选好后又可以通过键盘指令来判断手动或者自动算24点,最后将有无24点的结果显示在屏幕上。3功能及程序设计功能模块图如图3-1所示图3-1功能模块图24算法游戏的基本思想就是由程序先随产生3张扑克牌,每张扑克牌对应一个整数,花牌既能当10也能当0使用。所以首先要有一个随机产生扑克牌的模块。接下来就是用户用程序产生的扑克牌来算24点了,所以要有一个输入用户去接表达式的模块。用户输入完成后,程序就开始计算表达式了,所以要有一个计算表达式的模块。程序计算完表达式后就要判断用户输入的表达式是不是为24点了,所以还有一个判断表达式正误的模块。判断完后最后就是在屏幕上显示有无解这个模块。这4个模块是逐步递进的,是要前一个模块的功能完成后,才能执行后一个模块,否则程序就将出错。程序所涉及的数据结构主要为整形和字符型,整形数据结构主要是用来计算表达式的,字符型数据结构主要是用来输入表达式的。程序所涉及的数据库结构主要有数组和栈,数组在计算表达式和产生扑克牌是都要用到,栈只是用来计算表达式的。24算法游戏绘制扑克牌选择手动或自动计算表达式式判断结果并显示结果武汉理工大学《微机原理与接口技术》课程设计说明书44各子程序设计4.1各模块的详细算法4.1.1扑克牌的绘制绘制一个方块的子程序流程图如图4-1所示:图4-1这就绘制出了一个长120,宽80的方框;随机并显示花色,显示随机数字,就可以在屏幕上显示出了一张完整的扑克牌。显示扑克牌子程序流程图如图4-2所示:开始入栈AX,DX,CX清除输入缓冲区并请求指定的输入功能存像素值定义方框的长、宽出栈AX,DX,CX结束武汉理工大学《微机原理与接口技术》课程设计说明书5图4-2其中像素值存入color中,各像素值对应的颜色如下所示0-无色,1-绿,2-红,3-橘黄,4-橙红,5-紫红,7-白,8*-灰,9-蓝,10-绿,11-青绿,12-粉红,14-黄,15-白:4.1.2随机数的生成随机出牌可以选用汇编语言中的时间中断int21h里的2Ch功能。2CH功能描述:取系统时间。入口参数:AH=2CH。出口参数:CH=时(0~23),CL=分(0~59),DH=秒(0~59),DL=百分秒(0~99)。该程序用DL除以14的13个余数来作随机数。于是随机数生成部分的子程序流程图如图4-3所示:开始定义行、列存入像素值调用绘制一个方块的子程序结束武汉理工大学《微机原理与接口技术》课程设计说明书6图4-3通过该子程序,就可以生成1到13这13个随机数,但是如何连续生成不同的随机数呢?这就需要用到延时的子程序,流程图如图4-4所示:开始入栈CX,DX,BXDOS功能调用2CH的功能把DL给AL并扩展AH位AH除以14得13个余数把AH给AL并将AH清零,所得AX为随机数结束武汉理工大学《微机原理与接口技术》课程设计说明书7YNYN图4-44.1.3计算表达式计算式中的数需要将其放在堆栈段中保护起来,这样避免了在反复调用时的数据发生开始调用产生随机数的子程序延时以产生不同的随机数出栈CX随机数=2随机数13结束入栈CX,把CX赋值9000武汉理工大学《微机原理与接口技术》课程设计说明书8改变影响运行结果。该程序的计算分为自动和手动两种模式,自动模式可以由电脑自动计算。手动模式由手动输入运算式,再由电脑算出结果,判断正误。首先屏幕会出现‘DOYOUWANTTOCHOOSETWOMORECARDS?Y/N’字样,如果键入‘N’,则选择3张牌做运算。要想三个数组成24点,二其中的最大的数只能为10,花牌既能当10又能当零,可以将其分为两种情况:(1)自动模式通过键入‘A’来选择自动模式来算24点。1,2,3这3个数,包括括号,共有六种可能的树,分别为:(1*2)*3;(2*3)*1;(1*3)*2;(2*1)*3;(3*2)*1;(3*1)*2,其中‘*’表示‘+-*/’四则运算。如果能算出24,则显示结果;如果不能,显示‘NOANSWEWR!’。(2)手动模式当选择输入为‘H’时,切入手动模式,由操作人员输入公式,电脑计算出结果,再判断正误,在屏幕上显示出来。又由于本次课设对程序中花色牌的定义比较特殊,即J、Q、K和A可以作10参与运算,也可以当作0参与运算,我们小组讨论出了花色转换以及10,0转换的程序,其中花色转换的流程图如图4-5所示:武汉理工大学《微机原理与接口技术》课程设计说明书9YNYNYNYN图4-510和0之间变换的子程序的流程图:change1procleasi,datmovax,[si]cmpax,10jnzpp1movwordptr[si],0jmploop3开始[si]的值给BXBX=10BX=12BX=11BX=13结束把10赋给[si],’A’给[di]把11赋给[si],’B’给[di]把12赋给[si],’Q’给[di]把13赋给[si],’K’给[di]武汉理工大学《微机原理与接口技术》课程设计说明书10pp1:movax,[si+2]cmpax,10jnzpp2movwordptr[si+2],0jmploop3pp2:movax,[si+4]cmpax,10jnzpp3movwordptr[si+4],0jmploop3pp3:jmpchange2jmpchange2retchange1endp意思是先比较出花色牌,然后当10运算,没有结果再将起当0运算。4.2总的流程图有了上述几个关键程序模块,可方便地画出流程图。整个程序的流程图如4-6所示。武汉理工大学《微机原理与接口技术》课程设计说明书11图4-6整个程序的流程图5调试分析程序调试是一个比较繁复的过程,调试中会出现各种错误,我们组进行调试时也出现了很多问题。例如(1)第一次进行调试的时候,运行软件不能产生obj文件,经过检查后发现是因为‘jz’转移指令范围太小,只能用‘jmp’转移。(2)在运行的时候3张牌的花色和牌号显示得超出了牌的边框,于是通过对于程序的检测和讨论后,问题得到解决。问题的根源是初始的光标位置出现不对。调整中的几种情况如下图所示。显示结果显示’NOANSWER’判断是否再选两张牌并选择手动或自动运算结束是否判断是否为24点开始显示3张彩色扑克牌武汉理工大学《微机原理与接口技术》课程设计说明书12图5-1调试中不能算出24点三张牌的界面图5-2自动花牌当10用时正确结果界面图5-3自动花牌当0用时正确结果界面武汉理工大学《微机原理与接口技术》课程设计说明书13图5-4手动正确结果界面6心得体会本次微机课程设计的任务是:(1)屏幕上随机显示3张牌