大家好我是冈坂日川。最近临近期末,很多计算机系的学生肯定有课程设计,包括汇编啊,java啊,python啊这些,我今天给大家分享一个比较完善的汇编程序,是从 GitHub 上 转载并修改的代码,小细节,乱码问题我都解决了,你只需要复制黏贴,就可以执行了!同时,代码可以用于学习,但切记不可抄袭做作业!!!
转载 GitHub ASMTypingGame
- 项目简介 / 设计思路
- 代码片
- 执行结果视图
一、项目简介
ASMTypingGame
简述
这是一个用x86 MASM写的打字游戏,是我计算机组成原理与汇编语言课程的课程设计。
实现功能
老师给的要求如下:
- 游戏开始后,从屏幕的顶部不断生成字符往下掉,值随机,位置随机。
- 按下对应按键后,屏幕上对应的字符高亮显示
- 按下按键后,蜂鸣器发声
- 统计分数
我在老师的要求上做了一定的扩展,把程序写成了类似DOS窗口游戏的东西:
- 首先有做了初始界面,游戏界面,设置界面和积分界面等界面,并提供跳转的接口。
- 按下按键后,蜂鸣器发出有声调的声音,组合起来就是一首曲子,在设置界面提供修>改的接口。
- 提供字符生成速度和下落速度的修改,提供字符的配色选择。
不足与改进
这个程序还有很多可以修改的地方,比如界面可以做的更精美,音调可以调得更准等。
一、代码
CODE1 SEGMENT
ASSUME CS:CODE1,DS:DATA1,SS:STACKS,ES:EXS
MAIN PROC FAR
MOV AX,DATA1
MOV DS,AX
MOV AX,EXS
MOV ES,AX
;S:BP
INITIAL:
CALL INIT
CMP flag,0
JE NEWGAME
CMP flag,2
JE END_MAIN
CALL SETTING
JMP INITIAL
NEWGAME:
CALL INIT_GAME
CALL GAME
JMP INITIAL
END_MAIN:
MOV AH,4CH
INT 21H
MAIN ENDP
;**********************************************************
;*********************************************************
PUSH_REG MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
ENDM
;**********************************************************
;**********************************************************
POP_REG MACRO
POPF
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
ENDM
;**********************************************************
;*******************************************************
WRITE MACRO PAGE,ROW,COL,COLOR,CHAR
PUSH_REG
MOV BH,PAGE
MOV DH,ROW
MOV DL,COL
MOV AH,02H
INT 10H
MOV AL,CHAR
MOV BL,COLOR
MOV CX,1
MOV AH,09H
INT 10H
POP_REG
ENDM
;**********************************************************
;**********************************************************
MV_CUR MACRO PAGE,ROW,COL
PUSH_REG
MOV BH,PAGE
MOV DH,ROW
MOV DL,COL
MOV AH,02H
INT 10H
POP_REG
ENDM
;**********************************************************
;**********************************************************
MODULUS MACRO NUM1,NUM2
PUSH_REG
MOV AX,NUM1
MOV BX,NUM2
ADD AX,BX
MOV DX,0
DIV BX
MOV NUM1,DX
POP_REG
ENDM
;**********************************************************
;*********************************************************
RING MACRO WAIT
PUSH_REG
GET_FREQUENCE:
LEA DI,music_key
MOV AX,56
MUL music
ADD DI,AX
ADD DI,music_ptr
MOV AL,[DI]
DEC AL
SAL AL,1
XOR AH,AH
LEA SI,music_freq
ADD SI,AX
MOV DI,[SI]
INC music_ptr
MODULUS music_ptr,56
SOUND:
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,348CH
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
MOV BX,WAIT
WAIT1:
MOV CX,2800
DELAY:
LOOP DELAY
DEC BX
JNZ WAIT1
MOV AL,AH
OUT 61H,AL
RING_END:
POP_REG
ENDM
;**********************************************************
;
;Print String
;**********************************************************
P_STR MACRO PAGE,ROW,COL,STR,LEN,COLOR
MOV BP,STR
MOV AH,13H
MOV BH,PAGE
MOV DH,ROW