窗口屏幕显示程序Word格式文档下载.docx
《窗口屏幕显示程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《窗口屏幕显示程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
要求:
光标所在的窗口,当按回车键后不应将光标移出窗口外。
对有潜力的同学可进一步实现当按“↓”时可将光标移位到下面窗口,清小屏后从上到下建立一个有三项内容的菜单,如选择后可有相应功能:
1.Inputinleftwindows
2.Inputinrightwindows
2.Play<
twotigers>
Yourchoise(1,2,3):
3、分析与体会
本次实验是需要掌握宏调用的格式,字符属性(特别是70H,白底黑字的运用)。
有一个难点在与左右窗口的切换。
做了很长的时间尝试,用了一个自定义的标记来完成了这个工作。
在此基础上做按(↓),实现具有选择功能的调用比前面容易。
这次实验我是在网上找的一个代码,不过他的代码是首先在右窗口输入,行数列数都不一样。
我看懂了以后,自己修了了代码。
然后完成了第三个功能。
4、代码
代码1:
层次A的要求
DATASSEGMENT
CURXDB15;
光标初始位置
CURYDB10
LXDB15;
记录左窗口当前光标位置,初始化为左窗口初始位置
LYDB10
RXDB15;
记录右窗口当前光标位置,初始化为右窗口初始位置
RYDB48
DWXDB24;
记录下窗口当前光标位置,初始化为下窗口初始位置
DWYDB16
ULROWDB0
ULCOLDB0
LRROWDB0
LRCOLDB0
WINDOWNUMDB0;
自定义窗口标记,0(默认的)左窗口,1是右窗口
DATASENDS
CLEARMACROA,B,C,D;
宏指令clear清屏
MOVAH,6
MOVAL,0;
初始化窗口,全屏幕空白
MOVCH,A;
左上角行号
MOVCL,B;
左上角列号
MOVDH,C;
右下角行号
MOVDL,D;
右下角列号
MOVBH,7;
卷入行属性
INT10H;
BIOS调用,屏幕初始化
ENDM
SCROLLMACROCONT,ULROW,ULCOL,LRROW,LRCOL;
宏指令scroll向上卷动cont行
MOVAL,CONT;
上卷行数
MOVCH,ULROW;
MOVCL,ULCOL;
MOVDH,LRROW;
MOVDL,LRCOL;
MOVBH,70H;
卷入行属性,白底黑字
BIOS调用,上卷
POSTCMACROX,Y;
宏指令postc光标定位
MOVAH,2
MOVDH,X;
行
MOVDL,Y;
列
MOVBH,0;
页号
BIOS调用,置光标位置
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MAINPROCFAR
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAS
MOVDS,AX
CLEAR0,0,24,79
SCROLL11,5,10,15,30
SCROLL11,5,48,15,68
SCROLL8,17,16,24,60
POSTCCURX,CURY
INPUT:
;
输入键盘上的字符
MOVAH,0
INT16H;
BIOS调用,从键盘读字符,ah=扫描码
CMPAH,4DH;
判断输入字符是否为→右方向键
JNZNO_RIGHT
POSTCRX,RY
MOVWINDOWNUM,1
JMPINPUT
NO_RIGHT:
CMPAH,4BH;
判断输入字符是否为←左向键
JNZNO_LEFT
POSTCLX,LY
MOVWINDOWNUM,0
NO_LEFT:
CMPAH,01;
判断输入字符是否为ESC
JNZP2
MOVAH,4CH
INT21H
在正确的窗口打印字符
P2:
MOVAH,0AH
第0页
MOVCX,1;
重复次数,
输出AL里的字符
;
在下窗口输出
POSTCDWX,DWY;
光标定位下窗口
MOVBH,0
MOVCX,1
INT10H
判断下窗口是否上卷
INCDWY
CMPDWY,60
JLEISRIGHT
SCROLL1,17,16,24,60
MOVDWY,16
ISRIGHT:
判断是否在右窗口
CMPWINDOWNUM,1
JNZDISPLEFT
DISPRIGHT:
判断右窗口是否上卷
INCRY
CMPRY,68
JLERIGHTEXIT
SCROLL1,5,48,15,68
MOVRY,48
RIGHTEXIT:
右窗口输出
DISPLEFT:
判断左窗口是否上卷
INCLY
CMPLY,30
JLELEFTEXIT
SCROLL1,5,10,15,30
MOVLY,10
LEFTEXIT:
左窗口输出
MAINENDP
CODESENDS
ENDSTART
代码2:
层次S的要求
需要注意的是,两只老虎音乐的播放需要在XP或者是64位的WIN7的电脑上才能正常运行。
STR1DB'
1.Inputinleftwindows$'
STR2DB'
2.Inputinrightwindows$'
STR3DB'
3.play<
$'
MUS_FREGDW262,262,294,330,262,262,294,330,262
DW330,349,392,330,349,392,392,440
DW392,349,330,262,392,440,392,349
DW330,262,294,196,262,294,196,262,-1
MUS_TIMEDW11DUP(25)
DW50,25,25,50,4DUP(12),25,25
DW4DUP(12),4DUP(25),50,25,25,50
CMPAH,50H
JNZNO_DOWN
JMPP00
NO_DOWN:
P00:
POSTC17,16;
LEADX,STR1
MOVAH,9
POSTC18,16
LEADX,STR2
POSTC19,16
LEADX,STR3
POSTC20,16
JMPINPUT2
INPUT2:
MOVAH,1
CMPAL,31H
JNZP03
P03:
CMPAL,32H
JNZP04
P04:
CMPAL,33H
JNZINPUT2
CALLTWOTIGERS
以下是两只老虎的程序
TWOTIGERSPROCNEAR
LEASI,MUS_FREG
LEABP,DS:
MUS_TIME
FREQ:
MOVDI,[SI]
CMPDI,-1
JEEXIT
MOVBX,DS:
[BP]
CALLGENSOUND
ADDSI,2
ADDBP,2
JMPFREQ
通用发声程序
EXIT:
RET
TWOTIGERSENDP
GENSOUNDPROCNEAR
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0B6H
OUT43H,AL
MOVDX,12H
MOVAX,348CH
DIVDI
OUT42H,AL
MOVAL,AH
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
WAIT1:
MOVCX,8000
CALLWAITF
DELAY1:
DECBX
JNZWAIT1
POPDI
POPDX
POPCX
POPBX
POPAX
GENSOUNDENDP
延迟
WAITFPROCNEAR
WAITF1:
ANDAL,10H
CMPAL,AH
JEWAITF1
LOOPWAITF1
WAITFENDP