打字游戏程序设计报告Word下载.docx
- 文档编号:16244405
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:28
- 大小:100.21KB
打字游戏程序设计报告Word下载.docx
《打字游戏程序设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《打字游戏程序设计报告Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
3.4.4堆栈操作指令PUSH、POP
PUSH进栈指令的功能是将操作数推入堆栈。
它的源操作数可以是16为通用寄存器、段寄存器或存储器中的数据字,打不能是立即数。
堆栈是以“先进后出”的方式工作的一个存储区,栈区的段址由SS寄存器的内容确定。
堆栈的最大容量可为64K,即一个段的最大容量。
堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向发展,最小为0。
每次执行PUSH操作时,先修改SP的值,使SPSP-2后,然后把操作数压入堆栈种SP指示的位置上,低位字节放在较低地址单元,高位字节放在交高地址单元中。
POP出栈指令的功能是把当前的SP所指向的堆栈顶部的一个字送到指定的目的操作数中。
它的目的操作数可以是16位通用寄存器,段寄存器或存储单元,但CS不能做目的操作数。
每执行一次出栈操作,SPSP+2,即SP向高地址方向移动,指向新的栈顶。
3.4.5算数运算指令ADD、SUB、DIV、INC
ADD加法指令,它的功能是将源操作数相加,结果送到目的操作数中,即
目的源+目的。
SUB减法指令,它的功能是将目的操作数减去源操作数,结果送回目的操作数,即目的目的–源。
DIV无符号数除法指令,它的功能是对两个无符号二进制数进行除法操作。
INC增量指令,它的功能是对目的操作数加1,结果送回目的操作数,即目的目的+1。
ADD,SUB这两条指令的原操作数可以是寄存器、存储器或立即数,目的操作数只能是用寄存器和存储单元。
使用时需注意源和目的操作数不能同时为存储器,而且他们的类型必须一致,即都是字节或字。
DIV指令的原操作数可以是字节或字,如果源操作数为字节,16位被除数必须放在AX中,8位除数为原操作数,他可以是寄存器或存储单元,相除之后,8位商在AL中,余数在AH中。
要是操作数为字,32位被除数在DX,AX中,其中DX为高位字,16位除数作源操作数,他可以是寄存器或存储单元。
相除之后,AX中存16位商,DX存16位余数。
要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。
INC指令的目的操作数可以在通用寄存器或内存种,这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改。
指令执行后影响AF、OF、PF、SF和ZF,但进位标志CF不受影响。
3.5源程序及其说明
DISMACROSTRING,X
MOVAL,3
MOVAH,0
INT10H
MOVBP,SEGSTRING
MOVES,BP
MOVBP,OFFSETSTRING
MOVCX,15
MOVDH,X
MOVDL,29
MOVBL,74H
MOVAL,1
MOVAH,13H
ENDM
DIS4MACROSTRING,X,Y;
在指定位置以红底蓝字显示字符串
dis2
MOVCX,Y;
显示字符串的长度
MOVDH,X;
行位置
MOVDL,29;
列位置
MOVBL,74H;
显示字符串的属性74h
DIS3
DIS5
DIS1MACROSTRING1,Y,M;
在指定位置处显示字符串
MOVAH,2;
置光标位置
MOVBH,0
MOVDH,Y;
行标
MOVDL,M;
列标
MOVAH,09H;
显示str1
MOVDX,SEGSTRING1
MOVDS,DX
MOVDX,OFFSETSTRING1
INT21H
DIS2MACRO;
宏进栈
PUSHAX
PUSHBX
PUSHCX
PUSHDX
DIS3MACRO;
宏出栈
POPDX
POPCX
POPBX
POPAX
DIS5MACROS1,S2
DIS2
MOVAH,6D
MOVAL,0
MOVAL,25D
MOVBH,10100100B;
01111111b
MOVCH,0
MOVCL,0
MOVDH,0
MOVDL,80
DIS6MACROZ1,Z2,Z3,Z4;
画横向边框的宏
LOCALC5
MOVCX,Z1;
循环次数
MOVDL,Z2;
列
C5:
MOVBH,Z3;
页号
MOVDH,Z4;
行
MOVDL,2AH
INCDL
LOOPC5
DIS7MACROQ1,Q2,Q3,Q4;
画竖边框的宏
LOCALF1
MOVCX,Q4
MOVDH,Q1
F1:
MOVBH,Q2
MOVDL,Q3
INCDH
LOOPF1
DATASSEGMENT
STR1DB'
Welcometoplaychars'
0AH,0DH,'
$'
STR2DB'
MadebyZhouLiangfeng'
$'
STR3DB'
2010/1/8'
STR4DB'
Pleasechoosespeeding'
STR5DB'
PleasepressEntertocintinue...'
STR7DB'
speed1'
STR8DB'
speed2'
STR9DB'
speed3'
STR0DB'
Selectthenumberamong1-3'
STRADB'
<
------Pleasechoose----->
'
STRBDB'
score:
'
'
i'
STRCDB'
Youchoose:
STRDDB'
hqfuvodepfdjygnhtrwgaerjrklubgsnyrsbntrsbngtrdjykuahtrgregfytjgfjytjktru'
STREDB'
RIGHT:
ST1DB'
Pause'
ST2DB'
E:
Quit'
ST8DB'
Esc:
Back'
ST3DB'
FunctionMeun'
ST4DB'
pleaseinput...'
ST5DB'
SPACE:
Continue'
ST6DB'
Quitting...'
ST7DB'
Pressanykeytocontinue'
0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,'
LENTHEQU$-STRD;
STRD的长度
RDB1
MDB0
NDB?
ADB0;
速度1选择标志
BDB0;
速度2选择标志
VDB0;
速度3选择标志
DATASENDS
STACK1SEGMENT
DB100DUP(?
)
STACK1ENDS
CODESSEGMENT
MAINPROCFAR
ASSUMECS:
CODES,DS:
DATAS,SS:
STACK1
START:
MOVAX,DATAS
MOVDS,AX
CALLCLEAR;
调用清屏函数,清除dos界面
CALLDISPLAY1;
显示主欢迎界面
AG:
MOVA,0;
只相应的速度标志为0
MOVB,0
MOVV,0
TH2:
MOVAH,7;
无回显输入字符
CMPAL,0DH;
如果是回车,则继续
JNETH2;
否则继续输入
TH1:
调用清屏函数
DIS680,0,0,0;
宏调用画上边框
DIS70,0,79,24;
宏调用画右3边框
DIS70,0,0,25;
宏调用画左1边框
DIS679,0,0,24;
宏调用画下边框
DIS1STR4,10,25;
宏调用显示欢迎界面及速度选择项
DIS1STR7,12,30
DIS1STR8,14,30
DIS1STR9,16,30
DIS1STR0,20,16
THD:
键盘等待输入相应的速度选项
CMPAL,31H;
判断是否为1
JNEMODIFYA
JMPTHB;
是则转,JMP实现间接跳转
MODIFYA:
CMPAL,32H;
判断是否为2
JNEMODIFYB
JMPTHC;
是则转
MODIFYB:
CMPAL,33H;
判断是否为3
JNETHD;
不是则转
DIS4STR9,12,10;
速度3高亮度显示
DIS1STRC,12,14
MOVV,1;
速度3被选中的标志
JMPTHA
THB:
DIS4STR7,12,10;
速度1高亮度显示
MOVA,1;
速度1被选中的标志
THC:
DIS4STR8,12,10;
速度2高亮度显示
MOVB,1;
速度2被选中的标志
THA:
键盘等待确定输入
判断是否是回车确定
JNETHA;
不是则继续等待
CALLSLEEP2;
屏幕暂停缓冲
CALLPAINT;
调用函数画游戏边框
CALLGOAL;
调用函数显示得分
CALLFALL;
调用下落函数
CMPN,1;
是否确定退出
JETH9;
JMPAG;
不是继续
TH9:
MOVAH,4CH;
返回dos界面
MAINENDP
;
显示功能菜单函数
DISPLAY1PROCNEAR
DIS1STR1,10,25
DIS1STR2,13,29
DIS1STR3,16,31
DIS1STR5,21,19
DIS680,0,0,0
DIS679,0,0,24
DIS70,0,0,25
DIS70,0,79,24
RET
DISPLAY1ENDP
清屏函数,清除整个屏幕
CLEARPROCNEAR
MOVAH,6
MOVBH,7
MOVDH,24
MOVDL,79
MOVDX,0
MOVAH,2
DIS525D,10100100B
CLEARENDP
下落函数,核心子函数
FALLPROCNEAR
LEASI,STRD;
传递将要下落的字母子串
T1:
INCSI;
加1以便寻找下一个字母
MOVAH,6D;
置主游戏屏界面颜色
MOVAL,23D
MOVBH,01101110B
MOVCH,1;
从左上第1行
MOVCL,26;
从左上第26列
MOVDH,1;
从右上第1行
MOVDL,54;
从右上第54列
CALLRANDOM
MOVDL,AH;
获得随机数,保存至dl中dl为字母下落的y坐标
ADDDL,26;
基数为26,使其在范围之内
MOVDH,R
MOVCX,23
AGA:
MOVAL,[SI];
取下落字符
MOVDL,AL
MOVAH,02H
PUSHAX;
AX,CX进栈,以防干扰
MOVCX,0;
隐藏字母后面的光标
MOVAH,1
ORCH,00010000B
CALLSP_ADJ
MOVDL,'
;
显示空格
SUBAL,AL
MOVCX,50000
DL2:
LOOPDL2
MOVDL,0FFH
CMPAL,0;
判断是否输入
JZT0;
没有
CMPAL,[SI];
判断是否等于下落的字母
JET7;
等于下落的字母,则下落下一个字母
JNEX1
T7:
INCM
CALLPOINT
CALLBELL
JMPT1
X1:
CMPAL,20H
JETA
JNET3
TA:
CALLPAUSE
T3:
CMPAL,45H
JNET0
CALLEXIT
CMPN,1
JET4
T0:
CMPAL,1BH
JNET12
CALLCLEAR
CALLDISPLAY1
JMPT4
T12:
SUBCX,1
JZMODIFYC
JMPAGA
MODIFYC:
T4:
FALLENDP
时间延迟函数及速度1函数
SLEEP1PROC
MOVCX,550D
LOOP1:
LOOP2:
LOOP3:
NOP
LOOPLOOP3
LOOPLOOP2
LOOPLOOP1
SLEEP1ENDP
时间延迟函数及速度2函数
SLEEP2PROC
MOVCX,400D
LOOP4:
LOOP5:
LOOP6:
LOOPLOOP6
LOOPLOOP5
LOOPLOOP4
SLEEP2ENDP
时间延迟函数及速度3函数
SLEEP3PROC
MOVCX,280D
LOOP7:
LOOP8:
LOOP9:
LOOPLOOP9
LOOPLOOP8
LOOPLOOP7
SLEEP3ENDP
SP_ADJPROC
CMPA,1
JES1
CMPB,1
JES2
CMPV,1
CALLSLEEP3
JMPS3
S1:
CALLSLEEP1
S2:
CALLSLEEP2
S3:
SP_ADJENDP
画游戏边框
PAINTPROCNEAR
DIS70,0,55,25;
宏调用画右1边框
DIS70,0,56,25;
宏调用画右2边框
DIS70,0,24,25;
宏调用画左2边框
DIS70,0,25,25;
宏调用画左3边框
DIS1ST3,6,3
DIS1ST1,9,5
DIS1ST5,11,5
DIS1ST2,13,5
DIS1ST4,17,3
DIS1ST8,15,5
PAINTENDP
分数字符串显示函数
GOALPROCNEAR
MOVDH,11
MOVDL,60
MOVDX,SEGSTRE
MOVDX,OFFSETSTRE
GOALENDP
打印实际得分
POINTPROCNEAR
MOVDL,67
MOVAL,M
CM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打字 游戏 程序设计 报告