汇编实验 屏幕窗口程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五 屏幕窗口程序

一、 实验的目的与要求

(一)实验目的:掌握显示器IO 程序设计的方法,掌握宏的相关概念,以及运用方法。

(二)实验要求:在屏幕上开出三个窗口,它们的行列坐标如下页图所示,光标首先定位在右窗口最下面一行的行首(15, 50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。编写屏幕窗口程序时,要求将一些功能程序段定义成宏指令,如向上卷动、清屏、接受字符并判断、在屏幕上显示字符、光标定位。 二、实验正文

实验分析:实验思路比较简单,主要是运用BIOS 调用,这些查表可得,实验要求要用宏来定义一些基本功能,宏调用比较简单,把一些基本功能编写成宏,能高效率的执行程序,但是宏也存在着一些缺点,在宏调用时,要宏展开,这样会占用一定的空间,所以宏是一种以空间换时间的策略,像一些复杂的操作不宜编写成宏。BIOS 10号调用提供了大量的屏幕、光标显示格式,要注意参数的意义,以便正确的显示结果。

三、流程图如下:

(5,10) (15,30)

(5,50)

(15,70)

(18,15) (22,65)

四、实验结果

附录:程序源代码如下:

;**************************************************************** datas segment

cury db 15 ;光标初始位置

curx db 50

lx db 10 ;记录左窗口当前光标位置,初始化为左窗口初始位置ly db 15

rx db 50 ;记录右窗口当前光标位置,初始化为右窗口初始位置ry db 15

dwx db 15 ;记录下窗口当前光标位置,初始化为下窗口初始位置dwy db 22

ulrow db 0

ulcol db 0

lrrow db 0

lrcol db 0

windownum db 1

datas ends

;-----------------------------------------------------------------宏指令clear 清屏

clear macro a,b,c,d

mov al,0 ;初始化窗口

mov bh,7 ;卷入行属性

mov ch,a ;左上角行号

mov cl,b ;左上角列号

mov dh,c ;右下角行号

mov dl,d ;右下角列号

mov ah,6

int 10h ;BIOS调用,屏幕初始化

endm

;-------------------------------------------------------------宏指令scroll向上卷动一行scroll macro cont,ulrow,ulcol,lrrow,lrcol

mov al,cont ;上卷行数

mov bh,70h ;卷入行属性

mov ch,ulrow ;左上角行号

mov cl,ulcol ;左上角列号

mov dh,lrrow ;右下角行号

mov dl,lrcol ;右下角列号

mov ah,6

int 10h ;BIOS调用,上卷

endm

;--------------------------------------------------------------宏指令postc 光标定位

postc macro y,x

mov bh,0 ;页号

mov dh,y ;行

mov dl,x ;列

mov ah,2

int 10h ;BIOS调用,置光标位置

endm

;---------------------------------------------------------------在当前窗口和下窗口显示display macro

mov bh,0

mov cx,1

mov ah,0ah ;在当前的窗口打印字符

int 10h

postc dwy,dwx

mov bh,0

mov cx,1

mov ah,0ah ;在下窗口输出

int 10h

endm

;----------------------------------------------------------------接收字符并判断getchar macro

input: ;输入键盘上的字符

mov ah,0

int 16h ;BIOS调用,从键盘读字符

cmp ah,4bh ;判断输入字符是否为左向键

jnz no_left

postc ly,lx

mov windownum,2

jmp input

no_left:

cmp ah,4dh

jnz no_right ;判断输入字符是否为右向键

postc ry,rx

mov windownum,1

jmp input

no_right:

cmp ah,01 ;判断输入字符是否为ESC

jz exit

display ;嵌套调用

inc dwx

cmp dwx,65 ;判断下窗口是否上卷

jle isright

scroll 1,19,15,22,65

mov dwx,15

isright:

cmp windownum,1 ;判断是否在右窗口

jnz displeft

dispright: ;判断右窗口是否上卷inc rx

cmp rx,70

相关文档
最新文档