猜拳汇编程序源代码.docx
《猜拳汇编程序源代码.docx》由会员分享,可在线阅读,更多相关《猜拳汇编程序源代码.docx(21页珍藏版)》请在冰豆网上搜索。
猜拳汇编程序源代码
附录1:
猜拳程序设计源代码清单
getCharMACROChar;接收一个字符放在char里
PUSHAX
MOVAH,1
INT21H
MOVChar,AL
POPAX
ENDM
showCharMACROchar;显示字符
PUSHAX
PUSHDX
MOVAH,2
MOVDL,char
INT21H
POPDX
POPAX
ENDM
showStringMACROstring;调用9号功能显示字符串
PUSHAX
PUSHDX
PUSHDS
MOVAX,DATA_SEG
MOVDS,AX
MOVAH,9
LEADX,string
INT21H
POPDS
POPDX
POPAX
ENDM
setCurPosMACROM,N,P;设置光标的位置在M行,N列,p页
PUSHAX
PUSHBX
PUSHDX
MOVAH,2
MOVBH,P
MOVDH,M
MOVDL,N
INT10H
POPDX
POPBX
POPAX
ENDM
getCurPosMACROM,N;获取光标的位置,将相应的行放在M中,列值放在N中
PUSHAX
PUSHBX
PUSHDX
MOVAH,3;读光标位置
MOVBH,0
INT10H
MOVM,DH
MOVN,DL
POPDX
POPBX
POPAX
ENDM
initShowModelMACROA;初始化显示模式
PUSHAX
MOVAH,0;用来设定显示模式的服务程序
MOVAL,A;AL寄存器表示欲设定的模式
INT10H
POPAX
ENDM
initWindowMACROA,B,C1,C2,D1,D2;初始化窗口或窗口内容向上卷动,也可以用于清屏
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,6
MOVAL,A;上卷行数
MOVBH,B;卷入行属性(颜色)
MOVCH,C1;左上角行号
MOVCL,C2;左上角列号
MOVDH,D1;右下角行号
MOVDL,D2;右下角列号
INT10H
POPDX
POPCX
POPBX
POPAX
ENDM
PauseMACRO
PUSHAX
MOVAH,01H
INT21H
POPAX
ENDM
DATA_SEGSEGMENT;数据段定义
GameMenuDB'WelcomeUseCaiquanGame',0dh,0ah,'$';主菜单
DB'PlayGame',0dh,0ah,'$'
DB'About',0dh,0ah,'$'
DB'Exitgame',0dh,0ah,'$'
DisWDB'Win:
Time',0dh,0ah,'$'
DisFDB'Fail:
Time',0dh,0ah,'$'
DisEDB'YouhaveEquel:
Time',0dh,0ah,'$'
Dispay2DB'ThisTimeYouWin!
',0dh,0ah,'$'
Dispay3DB'ThisTimeYouFailed!
',0dh,0ah,'$'
Dispay4DB'ThisTimeYouEqueltoPC!
',0dh,0ah,'$'
Dispay5DB'Enter"Enter"tocontinue!
',0dh,0ah,'$'
Dispay6DB'Enter"ESC"toExit!
',0dh,0ah,'$'
DispaytDB'Youchoosethe"Tone"!
',0dh,0ah,'$'
DispaysDB'Youchoosethe"Scissor"!
',0dh,0ah,'$'
DispaycDB'Youchoosethe"Cloth"!
',0dh,0ah,'$'
DispayytDB'PCchoosethe"Tone"!
',0dh,0ah,'$'
DispayysDB'PCchoosethe"Scissor"!
',0dh,0ah,'$'
DispayycDB'PCchoosethe"Cloth"!
',0dh,0ah,'$'
KickDB?
R_NUMDB?
NUMDB?
XDB?
YDB?
FAIDB48
WINDB48
EQDB48
EXITMsgDB'Youreallywanttoexit!
','$'
DB'EnterYtoexit','$'
DB'EnterNtocontinue!
','$'
InformationDB'Authorinformation',0dh,0ah,'$'
DB'Name:
ShangZhiGuo',0dh,0ah,'$'
DB'Class:
tongxin1003',0dh,0ah,'$'
DB'StudentID:
20103309',0dh,0ah,'$'
CharDB?
LineADB'YouHaveBeginningGame!
',0dh,0ah,'$'
LineBDB'-----------------------------------',0dh,0ah,'$'
lineFDB'PleaseInput"0"or"1"or"2"',0dh,0ah,'$'
LineCDB'0------tone',0dh,0ah,'$'
LineC1DB'1------Scissor',0dh,0ah,'$'
LineC2DB'2------Cloth',0dh,0ah,'$'
LineDDB'/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/',0dh,0ah,'$'
LineEDB'InputyourchooseHere:
',0dh,0ah,'$'
LineE1DB'InputError!
Pleaseinputagain',0dh,0ah,'$'
LineE2DB'Chooseanumberfrom0-2input',0dh,0ah,'$'
LinetDB'Enter"Tab"toRestart!
',0dh,0ah,'$'
DATA_SEGENDS
STACK_SEGSEGMENTSTACK;堆栈段定义
STACK_BUFDW120DUP(?
)
TOPEQU$-STACK_BUF
STACK_SEGENDS
CODE_SEGSEGMENT;程序代码区
ASSUMECS:
CODE_SEG,DS:
DATA_SEG,SS:
STACK_SEG
MAINPROCFAR
START:
MOVAX,STACK_SEG
MOVSS,AX
MOVSP,TOP
MOVAX,DATA_SEG
MOVDS,AX
BEGIN:
initShowModel0H
initWindow0,9EH,0,0,25,40;宏调用
MENU:
setCurPos2,2,0
showStringLineD
setCurPos4,9,0;设置主菜单光标位置
showStringGameMenu
setCurPos8,15,0
showStringGameMenu[27]
setCurPos12,15,0
showStringGameMenu[39]
setCurPos16,15,0
showStringGameMenu[47]
setCurPos21,2,0
showStringLineD
setCurPos8,12,0
showChar'>'
Keyboad:
getCharKick;菜单选择部分
CMPKick,9;按的是键TAB
JETAB
JMPENTER
TAB:
getCurPosX,Y
NEXT_Tab_1:
CMPX,8;选择标记在start处
JNZNEXT_Tab_2
setCurPos8,12,0
showChar''
setCurPos8,15,0
showStringGameMenu[27]
setCurPos12,12,0
showChar'>'
JMPKeyboad
NEXT_Tab_2:
CMPX,12;选择标记在ABOUT处
JNZNEXT_Tab_3
setCurPos12,12,0
showChar''
setCurPos12,15,0
showStringGameMenu[39]
setCurPos16,12,0
showChar'>'
JMPKeyboad
NEXT_Tab_3:
CMPX,16;选择标记在exit处
JENEXT_Tab_3_ELSE
JMPERROR
NEXT_Tab_3_ELSE:
setCurPos16,12,0
showChar''
setCurPos16,15,0
showStringGameMenu[47]
setCurPos8,12,0
showChar'>'
JMPKeyboad
ENTER:
CMPKick,13;按的是键ENTER
JEENTER_ENTER
JMPESC_KEY
ENTER_ENTER:
getCurPosX,Y
NEXT_ENTER_1:
CMPX,8;选择标记在start处
JZNEXT_ENTER_E
JMPNEXT_ENTER_2
NEXT_ENTER_E:
MOVEQ,48
MOVFAI,48
MOVWIN,48
CALLGamePlay
JMPBEGIN
NEXT_ENTER_2:
CMPX,12;选择标记在about处
JNZNEXT_ENTER_3
CALLGameAbout
JMPBEGIN
NEXT_ENTER_3:
CMPX,16;选择标记在eXIT处
JNZERROR
CALLGameExit
JMPBEGIN
ESC_KEY:
CMPKick,27;按的是键ESC
JNEELSE_KEY
CALLGameExit
JMPBEGIN
ELSE_KEY:
JMPBEGIN
ERROR:
initShowModel0
initWindow0,9EH,0,0,25,40
setCurPos12,6,0
getCharKick
EXIT:
MOVAX,4CH
INT21H
MAINENDP
;开始游戏子程序
GamePlayPROC
ReStart:
initShowModel0
initWindow0,9EH,0,0,25,40
setCurPos2,2,0
showStringLineB
setCurPos3,2,0
showStringLineA
setCurPos5,2,0
showStringLineF
setCurPos7,2,0
showStringLineB
setCurPos10,12,0
showStringLineC
setCurPos13,12,0
showStringLineC1
setCurPos16,12,0
showStringLineC2
setCurPos19,2,0
showStringLineB
setCurPos24,2,0
showStringLineD
setCurPos19,2,0
showStringLineE2
CALLRand
MOVNUM,BL
Key:
setCurPos21,2,0
showStringLineE
setCurPos21,29,0
getCharR_NUM
CMPR_NUM,'0'
JEJISUAN
JMPScissor
Scissor:
CMPR_NUM,'1'
JEJISUAN
JMPCloth
Cloth:
CMPR_NUM,'2'
JEJISUAN
setCurPos19,2,0
showStringLineE1
setCurPos21,29,0
JMPKey
showStringLineE
JISUAN:
Pause
CMPR_NUM,'0'
JEJISUAN2;等于跳转
CMPR_NUM,'1'
JEJISUAN3
CMPR_NUM,'2'
JEJISUAN4
JISUAN2:
CMPNUM,0;计算机出“石头”计算
JEa;ping玩家出石头
CMPNUM,1
JEb;shu玩家出剪刀
CMPNUM,2
JEc;yin玩家出布
JISUAN3:
CMPNUM,0;计算机出“剪刀”计算
JEf;玩家出石头
CMPNUM,1;玩家出剪刀
JEe
CMPNUM,2
JEd;玩家出布
JISUAN4:
CMPNUM,0;计算机出“布”计算
JEh;玩家出石头
CMPNUM,1;玩家出剪刀
JEl;玩家出布
CMPNUM,2
JEg
a:
CALLSHOW1
CALLxian1
JMPshuru;shitouduishitou
RET
b:
CALLSHOW3;shitouduijiandao
CALLxian2
JMPshuru
RET
c:
CALLSHOW2;shitouduibu
CALLxian3
JMPshuru
RET
d:
CALLSHOW2
CALLxian4
JMPshuru
RET
e:
CALLSHOW1
CALLxian5
JMPshuru
RET
f:
CALLSHOW3
CALLxian6
JMPshuru
RET
g:
CALLSHOW3
CALLxian7
JMPshuru
RET
h:
CALLSHOW2
CALLxian8
JMPshuru
RET
l:
CALLSHOW1
CALLxian9
JMPshuru
RET
shuru:
setCurPos25,0,0
getCharKick
CMPKick,27
JEescc
CMPKick,13
JEcontinue
CMPKick,9
JNEshuru
RET
escc:
CALLGameExit
continue:
JMPReStart
GamePlayENDP
;产生随机数
RandPROC
PUSHCX
PUSHDX
PUSHAX
STI
MOVAH,0;读时钟计数器值
INT1AH
MOVAX,DX;清高6位
ANDAH,3
MOVDL,100;除100,产生0~100余数
DIVDL
MOVAH,0
MOVDL,3;除3,产生0~2余数
DIVDL
MOVBL,AH;余数存BX,除数
POPAX
POPDX
POPCX
RET
RandENDP
;游戏结果显示子程序
SHOW1PROC
INCEQ
initShowModel0
initWindow0,9EH,0,0,25,40
setCurPos2,2,0
showStringLineD
setCurPos8,2,0
showStringDispay4
setCurPos10,2,0
showStringLineB
setCurPos11,2,0
showStringDisE
setCurPos13,2,0
showStringDisF
setCurPos15,2,0
showStringDisW
setCurPos18,2,0
showStringDispay5
setCurPos20,2,0
showStringDispay6
setCurPos16,2,0
showStringLineB
setCurPos24,2,0
showStringLineD
setCurPos21,2,0
showStringLinet
setCurPos10,25,0
showCharEQ
setCurPos12,25,0
showCharFAI
setCurPos14,25,0
showCharWIN
RET
SHOW1ENDP
SHOW2PROC
INCFAI
initShowModel0
initWindow0,9EH,0,0,25,40
setCurPos2,2,0
showStringLineD
setCurPos8,2,0
showStringDispay3
setCurPos11,2,0
showStringDisE
setCurPos13,2,0
showStringDisF
setCurPos15,2,0
showStringDisW
setCurPos10,2,0
showStringLineB
setCurPos18,2,0
showStringDispay5
setCurPos20,2,0
showStringDispay6
setCurPos16,2,0
showStringLineB
setCurPos24,2,0
showStringLineD
setCurPos21,2,0
showStringLinet
setCurPos10,25,0
showCharEQ
setCurPos12,25,0
showCharFAI
setCurPos14,25,0
showCharWIN
RET
SHOW2ENDP
SHOW3PROC
INCWIN
initShowModel0
initWindow0,9EH,0,0,25,40
setCurPos2,2,0
showStringLineD
setCurPos8,2,0
showStringDispay2
setCurPos10,2,0
showStringLineB
setCurPos11,2,0
showStringDisE
setCurPos13,2,0
showStringDisF
setCurPos15,2,0
showStringDisW
setCurPos18,2,0
showStringDispay5
setCurPos20,2,0
showStringDispay6
setCurPos16,2,0
showStringLineB
setCurPos24,2,0
showStringLineD
setCurPos21,2,0
showStringLinet
setCurPos10,25,0
showCharEQ
setCurPos12,25,0
showCharFAI
setCurPos14,25,0
showCharWIN
RET
SHOW3ENDP
xian1PROC
setCurPos3,2,0
showStringDispayt
setCurPos5,2,0
showStringDispayyt
RET
xian1ENDP
xian2PROC
setCurPos3,2,0
showStringDispayt
setCurPos5,2,0
showStringDispayys
RET
xian2ENDP
xian3PROC
setCurPos3,2,0
showStringDispayt
setCurPos5,2,0
showStringDispayyc
RET
xian3ENDP
xian4PROC
setCurPos3,2,0
showStringDispays
setCurPos5,2,0
showStringDispayyt
RET
xian4ENDP
xian5PROC
setCurPos3,2,0
showStringDispays
setCurPos5,2,0
showStringDispayys
RET
xian5ENDP
xian6PROC
setCurPos3,2,0
showStringDispays
setCurPos5,2,0
showStringDispayyc
RET
xian6ENDP
xian7PROC
setCurPos3,2,0
showStringDispayc
setCurPos5,2,0
showStringDispayyt
RET
xian7ENDP
xian8PROC
setCurPos3,2,0
showStringDispayc
setCurPos5,2,0
showStringDispayys
RET
xian8ENDP
xian9PROC
setCurPos2,2,0
showStringDispa