屏幕窗口程序的设计Word文档格式.docx

上传人:b****5 文档编号:16294635 上传时间:2022-11-22 格式:DOCX 页数:12 大小:113.32KB
下载 相关 举报
屏幕窗口程序的设计Word文档格式.docx_第1页
第1页 / 共12页
屏幕窗口程序的设计Word文档格式.docx_第2页
第2页 / 共12页
屏幕窗口程序的设计Word文档格式.docx_第3页
第3页 / 共12页
屏幕窗口程序的设计Word文档格式.docx_第4页
第4页 / 共12页
屏幕窗口程序的设计Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

屏幕窗口程序的设计Word文档格式.docx

《屏幕窗口程序的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《屏幕窗口程序的设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

屏幕窗口程序的设计Word文档格式.docx

编程并上机调试。

周5:

撰写课程设计报告。

设计验收安排:

17周星期五8:

00起到计算机学院科学系实验中心进行上机验收。

设计报告书收取时间:

17周的星期五下午5:

00之前。

指导教师签名:

2011年12月25日

系主任(或责任教师)签名:

2011年12月25日

1问题描述

在屏幕上开出三个窗口,它们的行列坐标如图所示:

(5,10)(5,50)

 

(15,30)(15,70)

(18,15)

(22,65)

光标首先定位在右窗口最下面一行的行首(15,50),如从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。

若需要将字符显示于左窗口,则先按下

←键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。

如若再按下→键,输入字符就会接在先前输入的字符之后显示出来。

当一行字符显示满后(左右窗口一行显示20个字符,下窗口一行显示50个字符),窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。

编写屏幕窗口程序时,要求将一些功能程序段定义成宏指令,如:

①scroll——向上卷动

②clear——清屏

③get_char——接收输入字符,并判断是否是ESCape、←或→键,然后转到相应的入口处理

④display——在屏幕上显示字符

⑤pos_curse——光标定位

2设计分析

2.1问题分析

(1)宏指令能表示一段具有独立功能的程序代码。

宏指令定义的格式如下:

宏指令名MACRO[哑元表]

︙;

实现某种功能的程序段

ENDM

如把上卷全屏幕或部分屏幕(窗口)的功能定义成一条宏指令scroll,其形式为:

scrollmacroulrow,ulcol,lrrow,lrcol,att

movah,06h

moval,1

movch,ulrow

movcl,ulcol

movdh,lrrow

movdl,lrcol

movbh,att

int10h

endm

如此定义之后,在程序中可直接应用宏指令scroll,同时可赋予不同的参数而对不同的窗口进行上卷操作。

如程序中需对右窗口上卷一行时调用宏指令:

scroll5,50,15,70,70h

(2)在数据段中设置6个变量lx,ly,rx,ry,dwx和dwy,它们分别用来记录左窗口、右窗口和下窗口的当前光标位置,以保证在返回本窗口显示字符时,能够接着前一次显示的字符窜之后继续显示。

(3)在窗口中每显示一个字符,都要修改光标的列变量,同时判断是否超出本窗口的边界,如没有超出可继续接收并显示字符,如意超出边界,则需要上卷一行,同时把光标重新定位在本窗口底行的行首。

(4)一个字符无论在左窗口显示还是在右窗口显示,它同时还在下窗口中显示,因此要注意保存显示字符。

2.2程序中使用的功能调用

INT10H:

02H功能:

用文本坐标设置光标位置

入口参数:

AH=02H

BH=页号

DH/DL=行/列

出口参数:

03H功能:

在文本坐标下,读光标各种信息

入口参数:

AH=03H

出口参数:

CH=光标起始行

CL=光标结束行

DH/DL=行/列

06H功能:

屏幕初始化或上卷

AH=06H

AL=0初始化窗口

AL=上卷行数

BH=卷入行属性

CH/CL=左上角行/列号

DH/DL=右下角行/列

0EH功能:

显示字符(光标前移)

入口参数:

AH=0EH

AL=字符

BH=页码

BL=前景色

INT16H:

00H功能:

从键盘读字符

AH=00H

AH=扫描码

AL=字符码

3算法描述

3.1算法流程图

算法流程图

3.2算法简述

(1)如上算法流程图所示,窗口初始化时,光标在右窗口,对输入字符进行判断:

若为←键,则光标调整至左窗口;

若为→键,则光标调整至右窗口;

若为ESC键,则退出程序;

否者,按如下规则显示:

(2)若光标当前位置在右窗口,读取光标位置,在当前位置显示输入字符,修改光标列变量,并将ax进栈,保存当前输入的字符;

判断光标列变量是否越界(d=70),越界则将窗口上卷一行,并将光标置为最底行行首(修改d=50);

然后跳转至步骤(4)。

(3)若光标当前位置在左窗口,读取光标位置,在当前位置显示输入字符,修改光标列变量,并将ax进栈,保存当前输入的字符;

判断光标列变量是否越界(b=30),越界则将窗口上卷一行,并将光标置为最底行行首(修改b=10);

(4)在下窗口显示时,首先将ax出栈,ax中保存的是当前输入的字符;

将dx进栈,由于dx中保存的是当前光标在左(右)窗口中的位置,以保证在返回本窗口显示字符时,能够接着前一次显示的字符窜之后继续显示。

然后读取下窗口光标位置,显示字符,修改光标列变量并判断是否越界(f=65)。

越界,则修改f=15,并将窗口上卷一行,重置下窗口中光标位置。

将dx出栈,并置光标位置,使光标位于左(右)窗口中前次显示字符之后的位置,然后跳转至步骤

(1)。

4源程序与执行结果

4.1源程序及其说明

scrollmacroulrow,ulcol,lrrow,lrcol,att;

卷屏宏

movah,06h

moval,1

movch,ulrow

movcl,ulcol

movdh,lrrow

movdl,lrcol

movbh,att

int10h

endm

clearmacroulrow,ulcol,lrrow,lrcol,att;

清屏宏,初始化窗口

moval,0

pos_cursemacrox,y;

光标定位宏定义

movbh,0

movah,02h

movdh,x

movdl,y

displaymacro;

显示字符宏定义

movah,0eh

a,b,c,d,e,f分别保存下一个字符在左、右、下三个窗口应显示的位置

get_charmacroa,b,c,d,e,f;

接收输入字符宏定义

localagain,left,right,go,continue,continue1

again:

movah,00h;

从键盘读该字符,al:

字符码,ah:

扫描码

int16h

cmpah,01h;

若为ESC,退出程序

jeexit

cmpah,4bh;

若为←键,则跳转到左窗口

jeleft

cmpah,4dh;

若为→键,则跳转到左窗口

jeright

movah,03h;

读取光标位置,dh/dl=行/列

int10h

cmpdl,40;

判断光标是在左窗口还是右窗口

jlgo

pos_cursec,d;

读取右窗口光标位置

display;

显示字符

incd;

列变量d+1

pos_cursec,d;

重设光标位置

pushax;

保存当前输入字符

cmpd,70;

判断是否越界

jnecontinue

movd,50;

越界,则重置列变量d

scroll5,50,15,70,1fh;

右窗口上卷一行

pos_cursec,d;

重置光标位置

jmpcontinue

go:

pos_cursea,b;

读取左窗口光标位置

display;

incb;

列变量b+1

pos_cursea,b;

pushax;

cmpb,30;

movb,10;

scroll5,10,15,30,1fh;

左窗口上卷一行

pos_cursea,b;

continue:

popax;

取出当前输入字符

pushdx;

保存左(右)窗口光标位置

pos_cursee,f;

读取下窗口字符显示位置

incf;

列变量f+1

cmpf,65;

jnecontinue1

movf,15;

越界,则重置f

scroll18,15,22,65,1fh;

下窗口上卷一行

pos_cursee,f;

将下个字符输入位置设置在底行行首

continue1:

popdx;

取出保存的左(右)窗口光标坐标

movah,2h;

置光标位置

int10h

jmpagain

left:

将光标跳转至左窗口

jmpagain

right:

pos_cursec,d;

将光标跳转至右窗口

endm

datassegment

lxdb15;

初始时刻左窗口光标位置(lx,ly)

lydb10

rxdb15;

初始时刻右窗口光标位置(rx,ry)

rydb50

dwxdb22;

初始时刻下窗口光标位置(dwx,dwy)

dwydb15

bufdb'

Pleaseinputthechar!

Youcanpress←or→tochangebetweenleft-windowsandright-windows.Ifyouwanttoexit,youcanpressEsc.Nowpressanykeytoseetheresult!

$'

datasends

codessegment

assumecs:

codes,ds:

datas

start:

movax,datas

movds,ax

leadx,[buf]

movah,9

int21h

clear5,10,15,30,1fh;

初始化左窗口

clear5,50,15,70,1fh;

初始化右窗口

clear18,15,22,65,1fh;

初始化下窗口

pos_curserx,ry;

程序开始时光标位置

get_charlx,ly,rx,ry,dwx,dwy

exit:

movah,4ch

int21h

codesends

endstart

4.2调试方法

根据算法流程图编写好程序后,运行时存在许多问题,举例如下:

(1)初始时刻光标位置不在右窗口中,经查看INT10H中AH=2功能,未设定页号而导致错误,添加BH=0后,光标位于右窗口内;

(2)窗口显示区域与窗口设定的大小不一致(如下图所示),当输入较多字符后,窗口会逐渐显示完全。

经查阅书籍资料发现,INT10H中AH=6功能中,当AL=1时,表示上卷行数;

当AL=0时,表示初始化窗口。

而在程序设计中未初始化窗口,故导致上述情况的发生,经修改,添加了clear宏定义来完成窗口的初始化;

(3)输入字符后,光标会自动在左右窗口中跳转,并且在跳转时会有特殊字符出现(如上图所示),经查程序,再一次输入中左右窗口仅有一个作为输入窗口,而在程序中,执行完右窗口的操作后,没有执行jmpcontinue语句跳转至下窗口操作,而是顺次执行了左窗口的操作,导致了逻辑错误,经修改后,没有特殊字符出现。

但是还是没有解决光标的自动跳转的问题,经查,将dx进、出栈操作放置错了位置,导致没能实现预期的效果,修改后解决了这个问题。

然而光标的位置仅在当前显示字符下方,只有在边界处才在跳转至底行行首,检查程序发现,修改了光标列变量后没有执行pos_cursec,d(a,b)操作,使得光标没有后移,修改程序之后,解决了问题。

4.3运行结果

经反复调试、修改程序,最终程序能过顺利运行,运行结果如下所示:

经验证,上述结果正确,实现所要求的功能。

5总结与体会

5.1课程设计总结

此次课程设计做起来并不简单。

首先从题目阅读上来看,虽然设计要求很简单明了,但屏幕窗口的程序设计还是第一次遇到,显得很生疏;

其次,查阅了一些资料,大致了解了所要使用的指令,但这些指令并非学习过程中用到过的,许多指令功能不清楚,需要一点一点地查阅,还要从众多指令中选择正确的指令实现要求的功能,在相关指令使用过程中还要注意其使用方法;

在程序编写过程中,使用到了多个寄存器,在程序执行过程中,寄存器中的值会发生变化,有些值需要保存,有些值需要根据条件做适当更改,都需要严格控制;

在条件判断、程序跳转时,在何时执行哪段程序,及执行后跳转到哪条指令,在逻辑上都要十分清晰,且在实现时要注意条件控制。

5.2学习体会

经过此次的程序设计,我学到了很多。

这次程序设计所使用的指令功能调用与平时使用的不一样,但这并不是我们放弃不做的理由,反而是我们应该寻求方法解决问题的动力。

我们以学习的知识有限,遇到的问题却是多种多样的,我们不能保证所有的知识都学习过了,但我们能够在日常的学习过程中学会如何去学习,掌握学习的方法。

有了较强的学习能力,才能在遇到新问题、新事物时,能够有效的学习相关知识,也才能有效的解决问题。

本科生课程设计成绩评定表

班级:

 姓名:

  学号:

序号

评分项目

满分

实得分

1

学习态度认真、遵守纪律

10

2

设计分析合理性

3

设计方案正确性、可行性、创造性

20

4

设计结果正确性

40

5

设计报告的规范性

6

设计验收

总得分/等级

评语:

注:

最终成绩以五级分制记。

优(90-100分)、良(80-89分)、中(70-79分)、

及格(60-69分)、60分以下为不及格

                     指导教师签名:

                  201年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1