窗口屏幕显示程序.docx
- 文档编号:9028542
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:21.73KB
窗口屏幕显示程序.docx
《窗口屏幕显示程序.docx》由会员分享,可在线阅读,更多相关《窗口屏幕显示程序.docx(17页珍藏版)》请在冰豆网上搜索。
窗口屏幕显示程序
窗口屏幕显示程序
窗口显示程序
1、实验目的
建立屏幕窗口程序。
通过实验
(1)掌握键盘中断与屏幕中断的使用方法。
(2)建立若干功能子程序,掌握主程序与子程序之间的调用方法。
(3)通过自学,了解宏汇编的使用方法,通过宏程序简化需不断重复使用同一功能的程序。
2、实验内容
层次B:
编写一个程序实现在屏幕上开出三个窗口,它们的行列坐标如下图所示。
(5,10)
(5,48)
(15,30)(15,68)
(17,16)
(24,60)
光标首先定位在左窗口最下面一行的行首(15,10),在该窗口中从键盘输入字符。
输完一行后该行内容上翻。
按“^”键后可将鼠标定位在下窗口,并可输入字符。
层次A:
编写一个程序实现在屏幕上开出三个窗口,如层次B。
光标首先定位在左窗口最上面一行的行首(15,10),如从键盘输入字符,则显示在左窗口,同时也显示在下窗口的最下面一行。
若需要在右窗口输入,则先按下→键,接着再从键盘输入字符,字符就会从右窗口的最下行开始显示,同时下窗口也显示出右窗口的内容。
如若再按下←键,则光标回到左窗口,输入字符就会接在先前输入的字符之后显示出来。
该操作可重复进行。
当一行字符显示满后,所在窗口自动向上卷动一行,输入字符继续显示于下一行,窗口最高一行向上卷动后消失。
要求:
光标所在的窗口,当按回车键后不应将光标移出窗口外。
对有潜力的同学可进一步实现当按“↓”时可将光标移位到下面窗口,清小屏后从上到下建立一个有三项内容的菜单,如选择后可有相应功能:
1.Inputinleftwindows
2.Inputinrightwindows
2.Play
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行
MOVAH,6
MOVAL,CONT;上卷行数
MOVCH,ULROW;左上角行号
MOVCL,ULCOL;左上角列号
MOVDH,LRROW;右下角行号
MOVDL,LRCOL;右下角列号
MOVBH,70H;卷入行属性,白底黑字
INT10H;BIOS调用,上卷
ENDM
POSTCMACROX,Y;宏指令postc光标定位
MOVAH,2
MOVDH,X;行
MOVDL,Y;列
MOVBH,0;页号
INT10H;BIOS调用,置光标位置
ENDM
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
JMPINPUT
NO_LEFT:
CMPAH,01;判断输入字符是否为ESC
JNZP2
MOVAH,4CH
INT21H
;在正确的窗口打印字符
P2:
MOVAH,0AH
MOVBH,0;第0页
MOVCX,1;重复次数,
INT10H;输出AL里的字符
;在下窗口输出
POSTCDWX,DWY;光标定位下窗口
MOVAH,0AH
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:
;右窗口输出
POSTCRX,RY
JMPINPUT
DISPLEFT:
;判断左窗口是否上卷
INCLY
CMPLY,30
JLELEFTEXIT
SCROLL1,5,10,15,30
MOVLY,10
LEFTEXIT:
;左窗口输出
POSTCLX,LY
JMPINPUT
MAINENDP
CODESENDS
ENDSTART
代码2:
层次S的要求
需要注意的是,两只老虎音乐的播放需要在XP或者是64位的WIN7的电脑上才能正常运行。
DATASSEGMENT
CURXDB15;光标初始位置
CURYDB10
LXDB15;记录左窗口当前光标位置,初始化为左窗口初始位置
LYDB10
RXDB15;记录右窗口当前光标位置,初始化为右窗口初始位置
RYDB48
DWXDB24;记录下窗口当前光标位置,初始化为下窗口初始位置
DWYDB16
ULROWDB0
ULCOLDB0
LRROWDB0
LRCOLDB0
WINDOWNUMDB0;自定义窗口标记,0(默认的)左窗口,1是右窗口
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
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行
MOVAH,6
MOVAL,CONT;上卷行数
MOVCH,ULROW;左上角行号
MOVCL,ULCOL;左上角列号
MOVDH,LRROW;右下角行号
MOVDL,LRCOL;右下角列号
MOVBH,70H;卷入行属性,白底黑字
INT10H;BIOS调用,上卷
ENDM
POSTCMACROX,Y;宏指令postc光标定位
MOVAH,2
MOVDH,X;行
MOVDL,Y;列
MOVBH,0;页号
INT10H;BIOS调用,置光标位置
ENDM
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,50H
JNZNO_DOWN
JMPP00
NO_DOWN:
CMPAH,4DH;判断输入字符是否为→右方向键
JNZNO_RIGHT
POSTCRX,RY
MOVWINDOWNUM,1
JMPINPUT
NO_RIGHT:
CMPAH,4BH;判断输入字符是否为←左向键
JNZNO_LEFT
POSTCLX,LY
MOVWINDOWNUM,0
JMPINPUT
NO_LEFT:
CMPAH,01;判断输入字符是否为ESC
JNZP2
MOVAH,4CH
INT21H
;在正确的窗口打印字符
P2:
MOVAH,0AH
MOVBH,0;第0页
MOVCX,1;重复次数,
INT10H;输出AL里的字符
;在下窗口输出
POSTCDWX,DWY;光标定位下窗口
MOVAH,0AH
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:
;右窗口输出
POSTCRX,RY
JMPINPUT
DISPLEFT:
;判断左窗口是否上卷
INCLY
CMPLY,30
JLELEFTEXIT
SCROLL1,5,10,15,30
MOVLY,10
LEFTEXIT:
;左窗口输出
POSTCLX,LY
JMPINPUT
P00:
SCROLL8,17,16,24,60
POSTC17,16;光标定位下窗口
LEADX,STR1
MOVAH,9
INT21H
POSTC18,16
LEADX,STR2
MOVAH,9
INT21H
POSTC19,16
LEADX,STR3
MOVAH,9
INT21H
POSTC20,16
JMPINPUT2
INPUT2:
MOVAH,1
INT21H
CMPAL,31H
JNZP03
POSTCLX,LY
SCROLL8,17,16,24,60
MOVDWY,16
MOVWINDOWNUM,0
JMPINPUT
P03:
CMPAL,32H
JNZP04
POSTCRX,RY
SCROLL8,17,16,24,60
MOVDWY,16
MOVWINDOWNUM,1
JMPINPUT
P04:
CMPAL,33H
JNZINPUT2
CALLTWOTIGERS
JMPINPUT2
;以下是两只老虎的程序
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
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0B6H
OUT43H,AL
MOVDX,12H
MOVAX,348CH
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
WAIT1:
MOVCX,8000
CALLWAITF
DELAY1:
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET
GENSOUNDENDP
;延迟
WAITFPROCNEAR
PUSHAX
WAITF1:
INAL,61H
ANDAL,10H
CMPAL,AH
JEWAITF1
MOVAH,AL
LOOPWAITF1
POPAX
RET
WAITFENDP
MAINENDP
CODESENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 窗口 屏幕 显示 程序