光标式菜单完整.docx
《光标式菜单完整.docx》由会员分享,可在线阅读,更多相关《光标式菜单完整.docx(65页珍藏版)》请在冰豆网上搜索。
光标式菜单完整
共8个文件
1.批处理文件:
可连接多个EXE文件。
汇编菜单程序时可使用……
复制粘贴此文件到txt文本,再把txt后缀改为.bat即可使用。
其它文件需要用emu8086软件生成.exe
EXE文件名需要与批处理文件中调用的文件名一致。
ECHOOFF
:
BEGIN
CAIDAN.EXE
:
BE
IFERRORLEVEL8GOTOF8
IFERRORLEVEL7GOTOF7
IFERRORLEVEL6GOTOF6
IFERRORLEVEL5GOTOF5
IFERRORLEVEL4GOTOF4
IFERRORLEVEL3GOTOF3
IFERRORLEVEL2GOTOF2
TIME1.exe
PAUSE
GOTOBEGIN
:
F2
MUSIC.EXE
PAUSE
GOTOBEGIN
:
F3
CAIDAN2.EXE
GOTOBE
:
F5
SHUNXIN.EXE
GOTOF3
:
F6
GULINLIN.EXE
GOTOF3
:
F7
MORE.EXE
GOTOF3
:
F8
GOTOBEGIN
:
F4
ECHOON
2主菜单文件:
;CAIDAN.EXE
DISPMACROY0Y,XX,VAR,LENGTH,NN0
LOCALNEXT,QQW,QE
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHBP
PUSHSI
MOVAX,1301H
MOVBX,COLOR
MOVCX,LENGTH
MOVDH,Y0Y
MOVDL,XX
CMPVAR,'9'
JZQQW
MOVBP,OFFSETVAR
JMPQE
QQW:
MOVBP,ADDR
QE:
MOVSI,NN0
CMPSI,0
JZNEXT
ADDBP,L
SUBBP,COUNT
NEXT:
INT10H
POPSI
POPBP
POPDX
POPCX
POPBX
POPAX
ENDM
;................................
DATASEGMENT
L0DB'MENU'
L1DB'================'
L2DB'||||'
L3DB'||1TIME||'
L4DB'||2MUSIC||'
L5DB'||3BUILT||'
L6DB'||RETURN||'
L7DB'||||'
L8DB'////////\\\\\\\\'
LEQU$-L8
XEQU(80-L)/2
YEQU7
YYDB0
CCDB'9'
ADDRDW?
NNDW1
COLORDW0FH
COUNTDW0
LORGDBX+8
TABDW?
L3,L4,L5,L6
DATAENDS
;.................................
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,3
INT10H
MOVAH,1
MOVCX,2000H;设置光标属性
INT10H
;MOVCX,1DH
;初始化菜单
LAST:
INCCOUNT
DECLORG
DISPY+0,LORG,L0,COUNT,0
DISPY+0,40,L0,COUNT,1
DISPY+1,LORG,L1,COUNT,0
DISPY+1,40,L1,COUNT,1
DISPY+2,LORG,L2,COUNT,0
DISPY+2,40,L2,COUNT,1
DISPY+3,LORG,L3,COUNT,0
DISPY+3,40,L3,COUNT,1
DISPY+4,LORG,L4,COUNT,0
DISPY+4,40,L4,COUNT,1
DISPY+5,LORG,L5,COUNT,0
DISPY+5,40,L5,COUNT,1
DISPY+6,LORG,L6,COUNT,0
DISPY+6,40,L6,COUNT,1
DISPY+7,LORG,L7,COUNT,0
DISPY+7,40,L7,COUNT,1
DISPY+8,LORG,L8,COUNT,0
DISPY+8,40,L8,COUNT,1
;MOVCX,07FH
CALLWAITP
CALLWAITP
CALLWAITP
CMPCOUNT,L/2
JNELAST
;光标式选择
MOVCOLOR,51H
MOVNN,1
CALLJISUAN
DISPYY,X+4,CC,8,0;色带覆盖第1选项
SCAN:
MOVAH,1
INT16H
JZSCAN
MOVAH,0
INT16H
CMPAH,80
JEDOWN
CMPAH,77
JEDOWN
CMPAH,72
JEUP
CMPAH,75
JEUP
CMPAL,0DH
JEEXIT
JMPSCAN
DOWN:
CALLJISUAN
MOVCOLOR,0FH
DISPYY,X+4,CC,8,0
CMPNN,4
JEED
INCNN
JMPE1
ED:
MOVNN,1
E1:
CALLJISUAN
MOVCOLOR,51H
DISPYY,X+4,CC,8,0
JMPSCAN
UP:
CALLJISUAN
MOVCOLOR,0FH
DISPYY,X+4,CC,8,0
CMPNN,1
JEEU
DECNN
JMPE2
EU:
MOVNN,4
E2:
CALLJISUAN
MOVCOLOR,51H
DISPYY,X+4,CC,8,0
JMPSCAN
EXIT:
MOVAL,BYTEPTRNN
MOVAH,4CH
INT21H
MOVAH,4CH
INT21H
;计算DISP参数
JISUANPROC
MOVDI,NN
ADDDI,DI
MOVAX,TAB[DI]
ADDAX,4
MOVADDR,AX
MOVAL,BYTEPTRNN
ADDAL,9
MOVYY,AL
RET
JISUANENDP
WAITPPROC
PUSHAX
PUSHCX
MOVCX,63144
XORAX,AX
LOOP1:
INAL,61H
ANDAL,10H
CMPAL,AH
JELOOP1
MOVAH,AL
LOOPLOOP1
POPCX
POPAX
RET
WAITPENDP
CODEENDS
ENDBEG
3.
;CAIDAN2.EXE
DISPMACROY0Y,XX,VAR,LENGTH,NN0
LOCALNEXT,QQW,QE
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHBP
PUSHSI
MOVAX,1301H
MOVBX,COLOR
MOVCX,LENGTH
MOVDH,Y0Y
MOVDL,XX
CMPVAR,'9'
JZQQW
MOVBP,OFFSETVAR
JMPQE
QQW:
MOVBP,ADDR
QE:
MOVSI,NN0
CMPSI,0
JZNEXT
ADDBP,L
SUBBP,COUNT
NEXT:
INT10H
POPSI
POPBP
POPDX
POPCX
POPBX
POPAX
ENDM
;................................
DATASEGMENT
L0DB'DESIGNERS'
L1DB'================'
L2DB'||||||||||||||||'
L3DB'1SHUNXIN'
L4DB'|2LINLIN|'
L5DB'3MORE'
L6DB'|RETURN|'
L7DB'________________'
L8DB''
LEQU$-L8
XEQU(80-L)/2
TTEQU24
YDB25
YYDB0
CCDB'9'
ADDRDW?
NNDW1
COLORDW0FH
COUNTDW0
LORGDBX+8
TABDW?
L3,L4,L5,L6
DATAENDS
;.................................
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
BEG:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,3
INT10H
MOVAH,1
MOVCX,2000H;设置光标属性
INT10H
MOVCX,1DH
;初始化菜单
LAST:
DECY
DISPY,X,L0,L,0
CMPY,TT
JNCT0
INCY
DISPY,X,L1,L,0
CMPY,TT
JNCT1
INCY
DISPY,X,L2,L,0
CMPY,TT
JNCT2
INCY
DISPY,X,L3,L,0
CMPY,TT
JNCT3
INCY
DISPY,X,L4,L,0
CMPY,TT
JNCT4
INCY
DISPY,X,L5,L,0
CMPY,TT
JNCT5
INCY
DISPY,X,L6,L,0
CMPY,TT
JNCT6
INCY
DISPY,X,L7,L,0
CMPY,TT
JNCT7
INCY
DISPY,X,L8,L,0
DECY
T7:
DECY
T6:
DECY
T5:
DECY
T4:
DECY
T3:
DECY
T2:
DECY
T1:
DECY
T0:
;MOVCX,07FH
CALLWAITP
CALLWAITP
CALLWAITP
CMPY,7
JNELAST
;光标式选择
MOVCOLOR,51H
MOVNN,1
CALLJISUAN
DISPYY,X+4,CC,9,0;色带覆盖第1选项
SCAN:
MOVAH,1
INT16H
JZSCAN
MOVAH,0
INT16H
CMPAH,80
JEDOWN
CMPAH,77
JEDOWN
CMPAH,72
JEUP
CMPAH,75
JEUP
CMPAL,0DH
JEEXIT
JMPSCAN
DOWN:
CALLJISUAN
MOVCOLOR,0FH
DISPYY,X+4,CC,9,0
CMPNN,4
JEED
INCNN
JMPE1
ED:
MOVNN,1
E1:
CALLJISUAN
MOVCOLOR,51H
DISPYY,X+4,CC,9,0
JMPSCAN
UP:
CALLJISUAN
MOVCOLOR,0FH
DISPYY,X+4,CC,9,0
CMPNN,1
JEEU
DECNN
JMPE2
EU:
MOVNN,4
E2:
CALLJISUAN
MOVCOLOR,51H
DISPYY,X+4,CC,9,0
JMPSCAN
EXIT:
ADDNN,4
MOVAL,BYTEPTRNN
MOVAH,4CH
INT21H
MOVAH,4CH
INT21H
;计算DISP参数
JISUANPROC
MOVDI,NN
ADDDI,DI
MOVAX,TAB[DI]
ADDAX,4
MOVADDR,AX
MOVAL,BYTEPTRNN
ADDAL,9
MOVYY,AL
RET
JISUANENDP
WAITPPROC
PUSHAX
PUSHCX
MOVCX,63144
XORAX,AX
LOOP1:
INAL,61H
ANDAL,10H
CMPAL,AH
JELOOP1
MOVAH,AL
LOOPLOOP1
POPCX
POPAX
RET
WAITPENDP
CODEENDS
ENDBEG
4;TIME1.EXE
SHOWYEARMACROCHAR
PUSHAX
PUSHSI
PUSHCX
PUSHDX
PUSHBX
PUSHDI
MOVAX,CHAR
MOVSI,OFFSETDIVISORS
MOVDI,OFFSETRESULTS
MOVCX,4
AA:
MOVDX,0
DIVWORDPTR[SI];除法指令的被除数是隐含操作数,此处为dx:
ax,商ax,余数dx
ADDAL,48;商加上48即可得到相应数字的ASCII码
MOVBYTEPTR[DI],AL
INCDI
ADDSI,2
MOVAX,DX
LOOPAA
MOVCX,4
MOVDX,OFFSETRESULTS;待显字符串地址送入DX
MOVAH,9;调用DOS功能的09H子功能显示字符串,字符串以‘$’结束
INT21H
POPDI
POPBX
POPDX
POPCX
POPSI
POPAX
ENDM
DISPMACROCHAR;显示字符
PUSHAX
PUSHDX
MOVDL,CHAR
MOVAH,2
INT21H
POPDX
POPAX
ENDM
GETNUMMACROCHAR;显示数字
PUSHAX
PUSHDX
PUSHCX
MOVAL,CHAR
AAM;BCD码化ASCII码AL前四位bcd码转化为ASCII码后存入AH,后四位存入AL
MOVDH,AL;保存AL数据
MOVDL,AH
ORDL,30H;数转化为字
MOVAH,2;输出字符
INT21H
MOVDL,DH
ORDL,30H
MOVAH,2
INT21H
POPCX
POPDX
POPAX
ENDM
GETWEEKMACROCHAR;显示星期
PUSHAX
PUSHDX
PUSHSI
PUSHCX
LEASI,D_TAB
MOVAL,CHAR
XORAH,AH
CMPAX,0
JESU
MOVCX,AX
LOOP1:
INCSI
INCSI
LOOPLOOP1
SU:
MOVDX,[SI]
MOVAH,9
INT21H
POPCX
POPSI
POPDX
POPAX
ENDM
GETMONTHMACROCHAR;显示月分
PUSHAX
PUSHDX
PUSHSI
PUSHCX
LEASI,M_TAB
MOVAL,CHAR
DECAL
XORAH,AH
MOVCX,AX
LOOP2:
INCSI
INCSI
LOOPLOOP2
MOVDX,[SI]
MOVAH,9
INT21H
POPCX
POPSI
POPDX
POPAX
ENDM
DATASSEGMENT
DIVISORSDW1000,100,10,1
RESULTSDB0,0,0,0,"$"
BUFDB'A$'
BUF1DB'YUE$'
D_TABDWSUN,MON,TUE,WED,THU,FRI,SAT
M_TABDWJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DCE,TIM
SUNDB'Sunday$'
MONDB'Monday$'
TUEDB'Tuesday$'
WEDDB'Wednesday$'
THUDB'Thursday$'
FRIDB'Friday$'
SATDB'Saturday$'
JANDB'January$'
FEBDB'February$'
MARDB'March$'
APRDB'April$'
MAYDB'May$'
JUNDB'June$'
JULDB'July$'
AUGDB'August$'
SEPDB'September$'
OCTDB'October$'
NOVDB'November$'
DCEDB'December$'
TIMDB'.M.$'
XINDB'BEIJINGSHIJIAN$'
XIN1DB'***************************************$'
XIN2DB'DESIGNERS:
CaoShunxin,GuLinlin',0AH,0DH,0AH,0DH,0AH,0DH,27DUP(''),'PRESSANYKEYTOEXIT$'
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAX,STACKS
MOVSS,AX
CALLCLP
MOVAH,1
MOVCX,2003H;设置光标属性
INT10H
MOVAH,2;置光标位置
MOVBH,0;页号
MOVDH,7;行
MOVDL,33;列
INT10H
LEADX,XIN
MOVAH,9
INT21H
MOVAH,2;置光标位置
MOVBH,0;页号
MOVDH,8;行
MOVDL,20;列
INT10H
LEADX,XIN1
MOVAH,9
INT21H
MOVAH,2;置光标位置
MOVBH,0;页号
MOVDH,12;行
MOVDL,20;列
INT10H
LEADX,XIN1
MOVAH,9
INT21H
MOVAH,2;置光标位置
MOVBH,0;页号
MOVDH,13;行
MOVDL,23;列
INT10H
LEADX,XIN2
MOVAH,9
INT21H
LLL:
MOVAH,2;置光标位置
MOVBH,0;页号
MOVDH,10;行
MOVDL,21;列
INT10H
MOVAH,2CH;取时间,CH:
CL=时:
分;DH:
DL=秒:
1/1000秒
INT21H
GETNUMCH
DISP3AH
GETNUMCL
DISP3AH
GETNUMDH
DISP00H
CMPCH,12
JAP
DISP41H
JMPA
P:
DISP50H
A:
MOVDX,M_TAB+24
MOVAH,9
INT21H
MOVAH,2AH;取日期CX=年DH:
DL=月:
日
INT21H
GETWEEKAL
DISP2CH
GETMONTHDH
DISP00H
GETNUMDL
DISP2CH;','
SHOWYEARCX
MOVAH,06H
MOVDL,0FFH
INT21H
JELLL
CALLCLP
MOVAH,4CH
INT21H
CLPPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVBH,0;欲读取显示页
MOVAH,8;读取字属性值
INT10H
MOVBL,BH
MOVBH,AH;属性存入BH
MOVCX,0;左上角
MOVDX,194FH;右下角
MOVAX,600H;向上移动的列数存入AL(0表示矩形框内所有列)
INT10H;清屏
MOVAH,2;光标置于左上角
MOVBH,0
MOVDX,0
INT10H
POPDX
POPCX
POPBX
POPAX
RET
CLPENDP
CODESENDS
ENDSTART
5
;MUSIC.EXE
DATASEGMENT
INFO1DB0AH,0DH,'Welcomeyoutocomehere!
'
DB0AH,0DH,'Thisisamusicprogram!
'
DB0AH,0DH,'Pleaseselect!
$'
INFO4DB0AH,0DH,'Inputerror!
$'
INFO5DB0AH,0DH,'Pleaseinputagains!
$'
MUSLISTDB0AH,0DH,'================'
DB0AH,0DH,'|1MUSIC1|'
DB0AH,0DH,'|2MUSIC2|'
DB0AH,