24点游戏实验报告 汇编语言.docx

上传人:b****8 文档编号:10790130 上传时间:2023-02-22 格式:DOCX 页数:8 大小:20.02KB
下载 相关 举报
24点游戏实验报告 汇编语言.docx_第1页
第1页 / 共8页
24点游戏实验报告 汇编语言.docx_第2页
第2页 / 共8页
24点游戏实验报告 汇编语言.docx_第3页
第3页 / 共8页
24点游戏实验报告 汇编语言.docx_第4页
第4页 / 共8页
24点游戏实验报告 汇编语言.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

24点游戏实验报告 汇编语言.docx

《24点游戏实验报告 汇编语言.docx》由会员分享,可在线阅读,更多相关《24点游戏实验报告 汇编语言.docx(8页珍藏版)》请在冰豆网上搜索。

24点游戏实验报告 汇编语言.docx

24点游戏实验报告汇编语言

24点游戏实验报告汇编语言

微机原理实验报告学院名称:

通信与信息工程学院实验名称:

24点游戏班级:

安全0801学生姓名:

王宇,吴洁,吴泽鹏,石育妹,魏圆圆学号(班内序号):

060830(31,32,33,34,36)一、实验题目:

24点游戏二、实验目的与要求:

1、实验目的:

操作者任意输入4个牌张数字(1-9,A算1,花牌不算),程序要给出将这4个数字计算出24的表达式,如果不能计算出这个结果,显示“noanswer”;2、基本要求:

(1)图形显示牌张效果;

(2)结果显示表达式清晰;(3)若查询结果有超过20%比例不能计算出正确表达式,视为没有达到要求。

三、实验扩展:

1、可以在当前运行状态下,可以重新发牌,进行新一轮的游戏;2、游戏结束后,可按“Esc”键退出游戏。

四、实验所完成的功能:

1、运行程序,输入四张牌(1—9)后,会自动显示四张牌,并显示牌张效果,其中1显示的是A。

2、命令提示:

A-AUTO,SP-RESTART,ESC-QUIT;(SP为空格键)3、自动部分:

按下“A”键后,若有解,则显示运算表达式,若无解,则显示“noanswer!

”;五、实验代码基本框架:

(1)数据段部分:

(DataSegment)1、定义欢迎界面;2、定义光标位置;3、定义方框;4、自动24点部分数据段;5、界面显示部分;6、数据段结束(DataEnds)

(2)代码段部分:

(CodeSegment)1、设置BIOS调色板;2、显示欢迎语句;3、输入牌号并同时生成花色;4、输入命令:

A-AUTO,SP-RESTART,ESC-QUIT5、自动24点显示部分;6、显示部分子程序:

显示4个方框;显示牌号;显示花色;7、设置修改光标位置的子程序;8、绘制一个方块的子过程;9、输入牌号子程序;10、输入数据处理子程序;(转换1-A,及其他数字处理)11、24点计算函数(5种树的计算函数);12、5种树的显示函数;13、结束程序。

六、流程图一、数据段部分:

数据段部分结束数据段部分开始定义欢迎界面数据段部分结束数据段部分开始定义欢迎界面定义光标位置定义方框自动24点部分数据段二、代码段部分:

输入牌号及生成随机花色并显示牌张效果显示欢迎语句设置BIOS调色板代码段开始输入牌号及生成随机花色并显示牌张效果显示欢迎语句设置BIOS调色板代码段开始输入命令输入命令自动24点显示自动24点显示各子程序代码段结束各子程序代码段结束1、输入牌号及生成随机花色并显示牌张效果:

开始开始CX=0?

循环次数CX-1DI+1SI+2将花色送入偏移地址为(DI)的单元内将牌号送入偏移地址为(SI)和(SI+1)的单元内调用输入牌号及生成花色的子程序循环次数送CX存放花色数组偏移地址送DI牌号数组偏移地址送SICX=0?

循环次数CX-1DI+1SI+2将花色送入偏移地址为(DI)的单元内将牌号送入偏移地址为(SI)和(SI+1)的单元内调用输入牌号及生成花色的子程序循环次数送CX存放花色数组偏移地址送DI牌号数组偏移地址送SI处理数据N处理数据Y调用显示四个方框及牌号的子程序调用显示四个方框及牌号的子程序2、wait-key输入命令:

开始开始判断键盘是否输入A判断键盘是否输入AYN判断键盘是否输入空格判断键盘是否输入空格YN判断键盘是否输入退出键判断键盘是否输入退出键Y退出程序退出程序重新开始程序重新开始程序自动24点显示自动24点显示3、自动24点显示调用24点计算函数docal5调用24点计算函数docal4调用24点计算函数docal3调用24点计算函数docal2开始将输入的数放入dat-g和dat中调用24点计算函数docal1结果=24/?

调用24点计算函数docal2结果=24/?

调用24点计算函数docal5调用24点计算函数docal4调用24点计算函数docal3调用24点计算函数docal2开始将输入的数放入dat-g和dat中调用24点计算函数docal1结果=24/?

调用24点计算函数docal2结果=24/?

NY结果=24/?

结果=24/?

NY结果=24/?

结果=24/?

NY结果=24/?

结果=24/?

NY结果=24/?

结果=24/?

N调用24点显示函数调用24点显示函数显示NOANSWER显示NOANSWER除数=0?

除数=0?

NY将数100放入trans-val中(说明得数!

=24)用idiv除法指令,除以bx退出transval将数100放入trans-val中(说明得数!

=24)用idiv除法指令,除以bx退出transval子程序将余数放入dx中,商放入ax中dx=0?

N退出transval子程序商放入退出transval子程序商放入trans-val中七、实验代码:

(以上基本框架会在以下代码中有所标注);*运行程序,自己输入4张纸牌,通过命令键可实现自动运算24点,并将结果显示在纸牌下方*;*命令提示:

A-AUTO,SP-RESTART,ESC-QUIT;*自动部分:

若有解,则显示运算表达式,若无解,则显示'NOANSWEWR!

';///////////////////////////显示部分数据段//////////////////////////////////////////;***************************定义欢迎界面*****************************DATAsegmentNOTE1DB0AH,0DH,'WELCOMETOTHE24POINTSGAME','$'NOTE2DB0AH,0DH,'A-AUTO,SP-RESTART,ESC-QUIT','$'NOTE3DB0AH,0DH,'noanswer!

','$'NOTE4DB0AH,0DH,'Inputthenumbers:

','$';***************************定义光标位置********************X_POSDB10;行Y_POSDB10;列;******************定义方框*************************************yposdw?

;定义列起始位置xposdw?

;定义行起始位置colordb?

;0-无色,1-绿,2-红,3-橘黄,4-橙红,5-紫红,7-白,8*-灰,9-蓝,10-绿,11-青绿,12-粉红,14-黄,15-白cnt1DW0;定义方框宽度cnt2DW0;定义方框长度lendb0dat_dispdb4dup('');显示的牌的数字dat_gdw4dup(?

);输入的数的数组Input_ddw?

card_randb?

carddb4dup(?

);牌的花色;//////////////////////////////自动24点部分数据段/////////////////datdw4dup(?

)BDW?

idb0;i,j,k循环变量jdb0kdb0t1dw?

;临时计算结果t2dw?

t3dw?

trans_valdw?

;运算结果docal_1dw?

;树的计算结果docal_2dw?

docal_3dw?

docal_4dw?

docal_5dw?

buff1db11dup(?

),0dh,0ah,'$';各树输出结果缓存buff2db11dup(?

),0dh,0ah,'$'buff3db11dup(?

),0dh,0ah,'$'buff4db11dup(?

),0dh,0ah,'$'buff5db11dup(?

),0dh,0ah,'$'opstrdb'+','-','*','/'nosolve_flagdb0;nosolve标志dataends;/////////////////////界面显示部分/////////////////////////////codesegmentASSUMECS:

code,DS:

datastart:

MOVAX,dataMOVDS,AX;************************设置BIOS调色板****************************movah,00h;设置绘图模式moval,12h;16色图形模式int10hmovah,0bh;设置调色板movbh,0Fh;调色板IDmovbl,02h;颜色int10h;**************************显示欢迎语句*****************************LEADX,NOTE1MOVAH,09HINT21HLEADX,NOTE2MOVAH,09HINT21HMOVB,0260HMOVAH,2MOVBX,0MOVDX,BINT10HMOVSI,OFFSETNOTE4MOVDX,SIMOVAH,9INT21H;*************************输入牌号及随机花色************************leasi,dat_gLEADI,CARDmovcx,4MOVB,0370HInput_loop:

callInput_gmovbx,Input_dmovwordptr[si],bxMOVAL,CARD_RANMOVBYTEPTR[DI],ALincsiincsiINCDIINCBloopInput_loopcalldeal_datacallFRAME1callFRAME2;******************输入命令:

A-AUTO,SP-RESTART,ESC-QUIT*************wait_key:

MOVAH,08HINT21Hcmpal,'A'JZAUTOCMPAL,1BHJZEXITCMPAL,20HJZSTARTJMPWAIT_KEY;/////////////////////////////自动24点显示///////////////////////////AUTO:

part_24:

MOVX_POS,12;行,定义光标位置,显示24点算式MOVY_POS,24;列CALLPOSITIONmovcx,4leasi,dat_g;将数放入dat_g和dat中leadi,datcopy_data:

movax,wordptr[si]movwordptr[di],axincsiincsiincdiincdiloopcopy_dataloop1:

;显示自动运算结果loop2:

loop3:

calldocal1;调用各树并产生结果与24比较,相等则显示该运算表达式cmpdocal_1,24jzdisp1calldocal2cmpdocal_2,24jzdisp2calldocal3cmpdocal_3,24jzdisp3calldocal4cmpdocal_2,24jzdisp4calldocal5cmpdocal_5,24jzdisp5jmpno_solvedisp1:

calldisplay1;显示运算表达式并返回到wait_key处jmpwait_keydisp2:

calldisplay2jmpwait_keydisp3:

calldisplay3jmpwait_keydisp4:

calldisplay4jmpwait_keydisp5:

calldisplay5jmpwait_keyloop1_2:

jmploop1no_solve:

inck;遍历各运算符以确定是否有解,无解则显示NOANSWERcmpk,4jnzloop3incjmovk,0cmpj,4jnzloop2incimovj,0movk,0cmpi,4jnzloop1_2LEADX,NOTE3MOVAH,09HINT21Hmovnosolve_flag,1jmpwait_keykey_in:

movah,08hint21hcmpal,1bh;esc退出jzexitcmpal,20hjzstartexit:

movah,4chint21h;///////////////////////////显示部分////////////////////////////;****************************显示4个方框*************************FRAME1PROCPUSHFMOVxpos,70;定义行MOVypos,60;定义列movcolor,13;存像素值CALLRECTMOVxpos,70MOVypos,160movcolor,9CALLRECTMOVxpos,70MOVypos,260movcolor,14CALLRECTMOVxpos,70MOVypos,360movcolor,12CALLRECTMOVxpos,70MOVypos,460movcolor,0CALLRECTpopfRETFRAME1ENDP;**************************显示牌号******************************FRAME2PROCPUSHFleasi,dat_dispMOVX_POS,7;行MOVY_POS,12;列CALLPOSITIONMOVAL,[si]MOVBL,0bH;像素值MOVAH,0EHINT10HMOVX_POS,7MOVY_POS,25CALLPOSITIONMOVAL,[si+1]MOVBL,0bHMOVAH,0EHINT10HMOVX_POS,7MOVY_POS,37CALLPOSITIONMOVAL,[si+2]MOVBL,0bHMOVAH,0EHINT10HMOVX_POS,7MOVY_POS,49CALLPOSITIONMOVAL,[si+3]MOVBL,0bHMOVAH,0EHINT10h;***************************显示花色***************************MOVX_POS,5;行MOVY_POS,8;列CALLPOSITIONMOVAL,[DI]MOVBL,0AH;像素值MOVAH,0EHINT10HMOVX_POS,5MOVY_POS,21CALLPOSITIONMOVAL,[DI+1]MOVBL,0AHMOVAH,0EHINT10HMOVX_POS,5MOVY_POS,33CALLPOSITIONMOVAL,[DI+2]MOVBL,0AHMOVAH,0EHINT10HMOVX_POS,5MOVY_POS,46CALLPOSITIONMOVAL,[DI+3]MOVBL,0AHMOVAH,0EHINT10HPOPFRETFRAME2ENDP;***********************设置/修改光标的位置**************************POSITIONPROCNEARPUSHBXPUSHDXMOVBH,00H;页码MOVDH,X_POS;行MOVDL,Y_POS;列MOVAH,02H;设置光标位置INT10HPOPDXPOPBXPOSITIONENDP;***********************绘制一个方块的子过程***********************RECTprocnearpushaxpushdxpushcxmovah,0chmoval,color;存像素值movdx,xpos;存入行0-199movcnt1,120;方框宽度disp1_r:

movcx,ypos;存入列0-639movcnt2,80;方框长度disp2_r:

int10hinccxdeccnt2jnzdisp2_rincdxdeccnt1jnzdisp1_rpopaxpopdxpopcxRetRectendp;***********************牌号的输入及随机花色************************Input_gprocPUSHCXPUSHDXPUSHBXMOVAH,2MOVBX,0MOVDX,BINT10H;输入部分MOVAH,01HINT21HSUBAL,30HMOVAH,0MOVInput_d,AX;随机花色MOVAX,0MOVAL,DLCBWMOVBL,4DIVBLADDAH,3MOVCARD_RAN,AHPOPBXPOPDXPOPCXretInput_gendp;************************输入数据处理的子程序************************deal_dataprocpushbxpushcxleasi,dat_gleadi,dat_dispmovcx,4deal_on:

movwordptrbx,[si];转换1_Acmpbx,1jzdeal1jmpdeal_othersdeal1:

movwordptr[si],1movbyteptr[di],'A'jmpdeal_overdeal_others:

addbx,30hmovbyteptr[di],bldeal_over:

incsiincsiincdiloopdeal_onpopcxpopbxretdeal_dataendp;////////////////////////24点计算函数/////////////////////////////;/***************************5种树的计算函数******************;/********************/(1*2)*(3*4)****************1docal1procleasi,datmovax,[si]movbx,[si+2];计算(1*2)movdl,icalltransvalmovdx,trans_val;将计算结果保存movt1,dxmovax,[si+4]movbx,[si+6];计算(3*4)movdl,kcalltransvalmovdx,trans_valmovt2,dxmovax,t1movbx,t2movdl,jcalltransval;;计算(1*2)*(3*4)movdx,trans_valmovdocal_1,dxretdocal1endp;/*********************/1*(2*(3*4))*********************2docal2procleasi,datmovax,[si+4]movbx,[si+6]movdl,kcalltransvalmovdx,trans_valmovt1,dxmovax,[si+2]movbx,t1movdl,jcalltransvalmovdx,trans_valmovt2,dxmovax,[si]movbx,t2movdl,icalltransvalmovdx,trans_valmovdocal_2,dxretdocal2endp;/*******************/1*((2*3)*4)*********************3docal3procleasi,datmovax,[si+2]movbx,[si+4]movdl,jcalltransvalmovdx,trans_valmovt1,dxmovax,t1movbx,[si+6]movdl,kcalltransvalmovdx,trans_valmovt2,dxmovax,[si]movbx,t2movdl,icalltransvalmovdx,trans_valmovdocal_3,dxretdocal3endp;/*****************/((1*2)*3)*4************************4docal4procleasi,datmovax,[si]movbx,[si+2]movdl,icalltransvalmovdx,trans_valmovt1,dxmovax,t1movbx,[si+4]movdl,jcalltransvalmovdx,trans_valmovt2,dxmovax,t2movbx,[si+6]movdl,kcalltransvalmovdx,trans_valmovdocal_4,dxretdocal4endp;/******************/(1*(2*3))*4*5************************docal5procleasi,datmovax,[si+2]movbx,[si+4]movdl,jcallt

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

当前位置:首页 > 高等教育 > 经济学

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

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