900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【课程设计】8086汇编实现打字小游戏

【课程设计】8086汇编实现打字小游戏

时间:2020-06-16 06:12:25

相关推荐

【课程设计】8086汇编实现打字小游戏

大家好我是冈坂日川。最近临近期末,很多计算机系的学生肯定有课程设计,包括汇编啊,java啊,python啊这些,我今天给大家分享一个比较完善的汇编程序,是从GitHub上 转载并修改的代码,小细节,乱码问题我都解决了,你只需要复制黏贴,就可以执行了!同时,代码可以用于学习但切记不可抄袭做作业!!!

转载 GitHubASMTypingGame

- 项目简介 / 设计思路
- 代码片
- 执行结果视图

一、项目简介

ASMTypingGame

简述

这是一个用x86 MASM写的打字游戏,是我计算机组成原理与汇编语言课程的课程设计。

实现功能

老师给的要求如下:

游戏开始后,从屏幕的顶部不断生成字符往下掉,值随机,位置随机。按下对应按键后,屏幕上对应的字符高亮显示按下按键后,蜂鸣器发声统计分数

我在老师的要求上做了一定的扩展,把程序写成了类似DOS窗口游戏的东西:

首先有做了初始界面,游戏界面,设置界面和积分界面等界面,并提供跳转的接口。按下按键后,蜂鸣器发出有声调的声音,组合起来就是一首曲子,在设置界面提供修>改的接口。提供字符生成速度和下落速度的修改,提供字符的配色选择。

不足与改进

这个程序还有很多可以修改的地方,比如界面可以做的更精美,音调可以调得更准等。

一、代码

CODE1 SEGMENTASSUME CS:CODE1,DS:DATA1,SS:STACKS,ES:EXSMAINPROCFARMOV AX,DATA1MOV DS,AXMOVAX,EXSMOV ES,AX ;S:BPINITIAL:CALL INIT CMP flag,0 JE NEWGAMECMP flag,2JE END_MAINCALL SETTING JMP INITIALNEWGAME:CALL INIT_GAMECALLGAME JMP INITIALEND_MAIN:MOV AH,4CHINT 21HMAINENDP;**********************************************************;*********************************************************PUSH_REGMACROPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIPUSHFENDM;**********************************************************;**********************************************************POP_REG MACROPOPFPOP DIPOPSIPOPDXPOPCXPOPBXPOPAXENDM;**********************************************************;*******************************************************WRITE MACROPAGE,ROW,COL,COLOR,CHARPUSH_REGMOVBH,PAGE MOVDH,ROW MOVDL,COL MOVAH,02HINT 10HMOVAL,CHAR MOVBL,COLOR MOVCX,1 MOVAH,09H INT 10HPOP_REGENDM;**********************************************************;**********************************************************MV_CUR MACROPAGE,ROW,COLPUSH_REGMOVBH,PAGEMOVDH,ROWMOVDL,COL MOVAH,02HINT 10HPOP_REGENDM;**********************************************************;**********************************************************MODULUSMACRO NUM1,NUM2PUSH_REGMOV AX,NUM1MOV BX,NUM2ADD AX,BXMOV DX,0DIVBXMOV NUM1,DX POP_REGENDM;**********************************************************;*********************************************************RINGMACROWAITPUSH_REGGET_FREQUENCE:LEA DI,music_keyMOV AX,56MUL musicADD DI,AXADD DI,music_ptrMOV AL,[DI]DEC ALSAL AL,1XOR AH,AHLEASI,music_freqADD SI,AXMOV DI,[SI]INC music_ptrMODULUS music_ptr,56SOUND:MOV AL,0B6H OUT43H,ALMOV DX,12HMOV AX,348CHDIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61HMOV AH,ALOR AL,3OUT 61H,ALMOV BX,WAITWAIT1:MOV CX,2800DELAY:LOOP DELAYDEC BXJNZ WAIT1MOV AL,AHOUT 61H,ALRING_END:POP_REGENDM;**********************************************************;;Print String;**********************************************************P_STRMACRO PAGE,ROW,COL,STR,LEN,COLORMOV BP,STR MOV AH,13HMOVBH,PAGEMOV DH,ROW MOV DL,COLMOV CX,LEN MOV AL,1MOV BL,COLOR INT 10H ;CALL BIOSENDM;**********************************************************;**********************************************************FINDMACROCHARLOCAL LOOP1,LOOP2,NEXT1,NEXT2,FIND_ENDPUSH_REGadd CHAR,'A'sub CHAR,'a'mov aim,CHAR MOVCH,24LOOP1:MOVCL,79LOOP2:MOV BH,2MOVDH,CH MOVDL,CL MOVAH,02HINT 10HMOVBH,2MOV AH,08H INT 10HCMPAH,spec_colorJE NEXT2CMP AL,aimJNENEXT2WRITE 2,CH,CL,spec_color,aim INChit RING100JMP FIND_ENDNEXT2:DEC CLCMP CL,0JGE LOOP2NEXT1:DEC CHCMPCH,0JGE LOOP1FIND_END:POP_REGENDM;**********************************************************;**********************************************************INITPROCNEARPUSH_REGSET:MOV AH,05H MOV AL,0INT 10H ;CALL BIOSMOV flag,0LEA AX,init_msg P_STR 0,7,0,AX,603,base_colorLEA AX,msg1P_STR 0,18,0,AX,65,spec_colorLEA AX,msg2P_STR 0,19,0,AX,65,base_colorLEA AX,msg3P_STR 0,20,0,AX,65,base_colorCHOOSE:MOV AH,00HINT 16HCMP AL,0DHJE SET_ENDCMP AL,'w'JE UPCMP AL,'s'JE DOWNJMP CHOOSEUP:DEC flagJMP NEXTDOWN:INC flagNEXT: LEA AX,msg1P_STR 0,18,0,AX,65,base_colorLEA AX,msg2P_STR 0,19,0,AX,65,base_colorLEA AX,msg3P_STR 0,20,0,AX,65,base_colorMODULUS flag,3 ;flag=(flag+3)%3CMP flag,0JE P_NEWGAMECMP flag,1JE P_SET;P_EXITLEA AX,msg3P_STR 0,20,0,AX,65,spec_colorJMP CHOOSEP_NEWGAME:LEA AX,msg1P_STR 0,18,0,AX,65,spec_colorJMP CHOOSEP_SET:LEA AX,msg2P_STR 0,19,0,AX,65,spec_colorJMP CHOOSESET_END:POP_REGRETINIT ENDP;**********************************************************;**********************************************************SETTING PROC NEARPUSH_REGSETINIT:MOV AH,05H MOV AL,1INT 10H ;CALL BIOSLEA AX,set_msg P_STR 1,7,0,AX,603,base_colorMOV BX,10MOV DX,0 MOV AX,roll_gapDIV BXDEC AXMOV roll_gap,AXMOV DX,0 MOV AX,char_gapDIV BXDEC AXMOV char_gap,AXMOV BX,char_gapADD BL,'0' ;int 2 charWRITE 1,9,44,spec_color,BLMOV BX,roll_gapADD BL,'0' ;int 2 charWRITE 1,10,44,base_color,BLLEA BX,music_nameMOV AX,musicMOV CX,25MUL CXADD BX,AXP_STR 1,11,38,BX,25,base_colorLEA BX,color_nameMOV AX,colorMOV CX,25MUL CXADD BX,AXP_STR 1,12,38,BX,25,base_colorMOV flag,0CHOOSE:MOV AH,00H INT 16HCMP AL,0DH ;enter?JE SET_ENDCMP AL,'w'JE UPCMP AL,'s'JE DOWNCMP AL,'a'JE DECREASECMP AL,'d'JE INCREASEUP:DEC flagMODULUS flag,4;flag=(flag+3)%3JMP NEXTDOWN:INC flagMODULUS flag,4;flag=(flag+3)%3JMPNEXTINCREASE:CMP flag,0JE INC_CHARCMP flag,1JE INC_ROLLCMP flag,3JE INC_COLORINCmusicMODULUS music,5 JMPNEXTINC_CHAR:INC char_gapMODULUS char_gap,9 JMPNEXTINC_ROLL:INC roll_gapMODULUS roll_gap,9 JMP NEXTINC_COLOR:INC colorMODULUS color,5JMP NEXTDECREASE:CMP flag,0JE DEC_CHARCMP flag,1JE DEC_ROLLCMP flag,3JE DEC_COLORDEC musicMODULUS music,5 JMPNEXTDEC_CHAR:DEC char_gapMODULUS char_gap,9 JMPNEXTDEC_ROLL:DEC roll_gapMODULUS roll_gap,9 JMP NEXTDEC_COLOR:DEC colorMODULUS color,5JMP NEXTNEXT:LEA DI,color_numMOV AX,colorSAL AX,1ADD DI,AXMOV BX,[DI]MOV spec_color,BHMOV base_color,BLLEA AX,set_msg P_STR 1,7,0,AX,603,base_colorMOV BX,char_gapADD BL,'0' ;int 2 charWRITE 1,9,44,base_color,BLMOV BX,roll_gapADD BL,'0' ;int 2 charWRITE 1,10,44,base_color,BLLEA BX,music_nameMOV AX,musicMOV CX,25MUL CXADD BX,AXP_STR 1,11,38,BX,25,base_colorLEA BX,color_nameMOV AX,colorMOV CX,25MUL CXADD BX,AXP_STR 1,12,38,BX,25,base_colorCMP flag,0JE P_CHARCMP flag,1JE P_ROLLCMP flag,3JE P_COLOR;P_MSC:LEA BX,music_nameMOV AX,musicMOV CX,25MUL CXADD BX,AXP_STR 1,11,38,BX,25,spec_colorJMPCHOOSEP_CHAR:MOV BX,char_gapADD BL,'0' ;int 2 charWRITE 1,9,44,spec_color,BLJMP CHOOSEP_ROLL:MOV BX,roll_gapADD BL,'0' ;int 2 charWRITE 1,10,44,spec_color,BLJMP CHOOSEP_COLOR:LEA BX,color_nameMOV AX,colorMOV CX,25MUL CXADD BX,AXP_STR 1,12,38,BX,25,spec_colorJMPCHOOSESET_END:MOV BX,10MOV AX,roll_gapINC AXMUL BXMOV roll_gap,AXMOV AX,char_gapINC AXMUL BXMOV char_gap,AXPOP_REGRETSETTING ENDP;**********************************************************;**********************************************************INIT_GAMEPROCNEARPUSH_REGSET:MOV AH,05H MOV AL,2INT 10H ;CALL BIOSMOV music_ptr,0MOVAH,07HMOVAL,0MOVBH,base_colorMOVCH,0MOVCL,0MOVDH,24MOVDL,79 INT 10H;CALL BIOSMOVAH,2CHINT 21HANDDH,DH MOVroll_last,DXMOVchar_last,DXMOV sum,0MOV hit,0MOV AH,0CHMOV AL,00HINT21HINIT_END:POP_REGRETINIT_GAMEENDP;**********************************************************;**********************************************************GAMEPROCFARPUSH_REGMOVCX,10GAMING:CALLROLL_DOWNCALLNEW_CHARCALLLISTENJMPGAMINGGAME_END:POP_REGRETGAMEENDP;**********************************************************;**********************************************************ROLL_DOWNPROCNEARPUSH_REGGET_GAP:MOVAH,2CHINT 21HANDDH,DHSUBDX,roll_lastCMPDX,0JGE JUDGEADDDX,100JUDGE: CMPDX,roll_gapJBROLL_ENDDO_ROLL:MOVAH,07HMOVAL,1MOVBH,base_colorMOVCH,0 MOVCL,0 MOVDH,24 MOVDL,79 INT 10H;CALL BIOSMOVAH,2CHINT 21HANDDH,DHMOVroll_last,DX ROLL_END:POP_REGRETROLL_DOWNENDP;**********************************************************;**********************************************************NEW_CHARPROCNEARPUSH_REGGET_GAP:MOVAH,2CHINT 21HANDDH,DH ;get current timeSUBDX,char_lastCMPDX,0JGE JUDGEADDDX,100JUDGE: CMPDX,char_gapJBCHAR_ENDDO_NEWCHAR:MOVLEFT,1MOV RIGHT,81CALLRAND MOVAX,RANDOMDECAXMOVLEFT,1MOVRIGHT,26CALLRANDMOVCX,RANDOMDECCXADDCX,'A' WRITE2,0,AL,base_color,CL ;INC sum ;MOVAH,2CHINT 21HANDDH,DH ;get current timeMOVchar_last,DX ;CHAR_END:POP_REGRETNEW_CHARENDP;**********************************************************;**********************************************************LISTENPROCNEARPUSH_REGGET_STATUS:MOVAH,01HINT 16HJZ LISTEN_ENDMOV AH,07HINT 21HCMP AL,1BH;Esc?JE DO_PAUSE CMP AL,'a';a-z?JBNEXT_STATUSCMP AL,'z'JG NEXT_STATUSFINDALJMP GET_STATUS ;otherDO_PAUSE:CALL PAUSINGNEXT_STATUS:JMP GET_STATUSLISTEN_END:POP_REGRETLISTENENDP;**********************************************************;**********************************************************PAUSINGPROCNEARPUSH_REGMOV AH,05H MOV AL,3INT 10H ;CALL BIOSLEA AX,pause_msg P_STR 3,7,0,AX,603,base_colorMOVBX,sumMV_CUR 3,9,30 CALL PRINTMOVBX,hit MV_CUR 3,9,46CALL PRINTMV_CUR 3,10,39MOV AX,hitMOVBX,100MULBXMOV BX,sumCMP BX,0JE P3DIV BXMOV BX,AXP3:CALL PRINTMV_CUR 3,16,0MOV AH,00HINT 16HCMP AL,1BH JNE CONTINUE EXIT:CALL MAIN CONTINUE:MOV AH,05H MOV AL,2INT 10H ;CALL BIOSPOP_REGRETPAUSING ENDP;**********************************************************;*********************************************************RANDPROCNEARPUSH_REGGET_RAND:MOV AX, 233 MOV DX, 41H OUT DX, AX IN AL, DX MULSEED SET_RAND:MOVBX,LEFTMOVCX,RIGHTSUB CX,BX INCCXDIVCXADDDX,BX MOVRANDOM,DXMOVSEED,DXRAND_END:POP_REGRETrandENDP;**********************************************************;**********************************************************PRINTPROCNEARPUSH_REGMOVAX,BXMOVBX,10MOVCX,0CMPAX,0JNE LOOP1PUSH AXINC CXJMP LOOP2LOOP1:CMPAX,0 JELOOP2MOVDX,0DIVBXPUSH DXINCCXJMPLOOP1LOOP2:POP DXADDDL,30H;int 2 charMOV AH,0EH MOV AL,DL MOV BL,base_color INT 10H ;CALL BIOSLOOP LOOP2PRINT_END:MOVDL,0AHINT21HMOVDL,0DHINT21HPOP_REGRETPRINTENDP;**********************************************************CODE1 ENDS;----------------------------------------------------------;----------------------------------------------------------STACKS SEGMENTstkdb1000dup(?)STACKS ENDS;----------------------------------------------------------;----------------------------------------------------------DATA1 SEGMENTseeddw? randomdw? leftdw? rightdw?char_gapdw90roll_gapdw 90char_lastdw ?roll_lastdw ?sumdw 0 hitdw 0aim db ?flag dw ? music dw 0 music_freq dw 262dw294dw330dw349dw392dw440dw494 music_key db 1,1,5,5,6,6,5,4,4,3,3,2,2,1,1,1,5,5,6,6,5,4,4,3,3db2,2,1,1,1,5,5,6,6,5,4,4,3,3,2,2,1,1,1,5,5,6,6,5,1,1,1,1,1,1,1db 3,1,6,5,6,6,1,6,6,6,3,1,2,5,3,2,5,6,1,6,2,3,1,6,5db 3,1,6,5,6,3,1,6,6,5,6,1,6,2,3,1,6,5,3,1,6,5,6,3,1,6,6,1,1,1,1 db 1,3,3,2,1,3,2,1,3,3,2,1,1,1,1,6,1,2,3,3,3,0,5,6,1db 1,1,6,1,2,3,2,3,5,5,6,1,1,6,1,2,3,2,3,2,2,1,2,1,1,1,1,1,1,1,1db5,3,2,2,1,1,1,1,1,1,1,6,5,5,6,6,6,6,1,2,3,5,5,5,5db1,1,2,2,2,1,1,7,1,1,1,1,6,5,5,6,6,6,6,1,1,2,3,5,5,5,5,3,2,2,2 db 1,3,3,2,1,3,2,1,3,3,2,1,1,1,1,6,1,2,3,3,3,0,5,6,1db3,3,2,3,2,1,1,1,2,2,1,1,5,5,6,5,6,5,7,6,6,5,6,1,3,2,1,1,1,1,1 music_ptr dw ?color dw 0 base_color db 07H spec_color db 04H color_num dw 0407H dw 0402H dw 0207H dw 8407Hdw 0704HDATA1 ENDS;----------------------------------------------------------;----------------------------------------------------------EXSSEGMENTpause_msgdb '*************************************************',0ah,0dhdb '* *',0ah,0dhdb '* sum:score: *',0ah,0dhdb '* your rate is % *',0ah,0dhdb '* *',0ah,0dhdb '* press esc to exit *',0ah,0dhdb '* or other key to continue *',0ah,0dhdb '* *',0ah,0dhdb '*************************************************',0ah,0dhinit_msgdb '*************************************************',0ah,0dhdb '* *',0ah,0dhdb '* A little word game*',0ah,0dhdb '* *',0ah,0dhdb '* Produced by _Backl1ght*',0ah,0dhdb '* *',0ah,0dhdb '* press w,s and enter to choose *',0ah,0dhdb '* *',0ah,0dhdb '*************************************************',0ah,0dhmsg1db'New Game ',0ah,0dhmsg2db'Settings ',0ah,0dhmsg3db 'Exit',0ah,0dhset_msgdb '*************************************************',0ah,0dhdb '* *',0ah,0dhdb '* new char speed : *',0ah,0dhdb '* roll down speed: *',0ah,0dhdb '* game music :*',0ah,0dhdb '* game color :*',0ah,0dhdb '* press wsad and enter to choose *',0ah,0dhdb '* *',0ah,0dhdb '*************************************************',0ah,0dhmusic_name db 'little star 'db 'hong yan 'db 'xiao qing ge 'db 'lightest star 'db 'ai pin cai hui ying'color_name db 'white(red)'db 'green(red)'db 'white(green) 'db 'white(s_red) 'db 'red(white)'EXSENDS;----------------------------------------------------------END

三、执行结果视图

四、总结

代码可以用于学习,切记不可抄袭做作业之类的!祝大家学习愉快!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。