汇编实验:屏幕窗口程序
2017-03-27 10:47
197 查看
实验3.4 屏幕窗口程序
1.题目:屏幕窗口程序
2.实验要求:
在屏幕上开出三个窗口,它们的行列坐标按照教材要求。光标首先定位在右窗口最下面一行的行首(15,50),如从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示出左窗口的内容。如若再按下键,输入字符就会接在先前输入的字符之后显示出来。当一行字符显示满后(左右窗口一行向社会20个字符,下窗口一行显示50个字符),窗口自动向上卷动一行,输入字符继续显示最低一行,窗口最高一行向上卷动后消失。
编译及运行结果
问题及收获
对于实验3.4,清屏,卷屏,光标定位等部分在书上都有实例讲解,比较容易,对于接收字符,显示字符部分就需要自己动动脑,动动手去实现,这部分主要是参考自己在网上查找的资料实现的。所以整体来说,好好读书,理解起来不难,实现的话也没有遇到特别的困难。
1.题目:屏幕窗口程序
2.实验要求:
在屏幕上开出三个窗口,它们的行列坐标按照教材要求。光标首先定位在右窗口最下面一行的行首(15,50),如从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示出左窗口的内容。如若再按下键,输入字符就会接在先前输入的字符之后显示出来。当一行字符显示满后(左右窗口一行向社会20个字符,下窗口一行显示50个字符),窗口自动向上卷动一行,输入字符继续显示最低一行,窗口最高一行向上卷动后消失。
;shiyan3.4 ;-------------------------------------------------- datarea segment lx db 15 ;win1当前光标位置 ly db 10 rx db 15 ;win2当前光标位置 ry db 50 dwx db 22 ;win3当前光标位置,初始化为win2初始位置 dwy db 15 winnum db 1;这个是自定义窗口标记,0是win1,1是win2(默认的) datarea ends ;--------------------------------------------------- clear macro;清屏功能,参考书上例题9.11 mov ah,6 mov al,0 mov bh,7 mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h endm ;--------------------------------------------------- scroll macro cont,win_ulr,win_ulc,win_lrr,win_lrc;上卷窗口(上卷cont行)参考书上例题9.13 mov ah,6 ;参数分别为上卷行数,左上角行号,左上角列号,右下角行号,右下角列号 mov al,cont mov ch,win_ulr mov cl,win_ulc mov dh,win_lrr mov dl,win_lrc mov bh,14h int 10h endm ;--------------------------------------------------- pos_curse macro px,py ;光标定位 参考书上例题9.8 mov bh,0;页号 mov ah,2 mov dh,px;行 mov dl,py;列 int 10h;BIOS调用,置光标位置 endm ;--------------------------------------------------- display macro;屏幕显示 ;在win3输出 pos_curse dwx,dwy;光标定位win3 mov ah,0ah mov bh,0 mov cx,1 int 10h inc dwy ;判断win3是否上卷 cmp dwy,65 jle is_win1 ;不上卷 scroll 1,18,15,22,65;上卷1行 mov dwy,15 ;光标回到新一行起点 is_win1: ;判断是否在win1 cmp winnum,0 jnz disp_win2 disp_win1: ;判断win1是否上卷 inc ly cmp ly,30 jle win1opt scroll 1,5,10,15,30 mov ly,10 win1opt: ;win1输出 pos_curse lx,ly jmp input disp_win2: ;判断win2是否上卷 inc ry cmp ry,70 jle win2opt scroll 1,5,50,15,70 mov ry,50 win2opt: ;win2输出 pos_curse rx,ry jmp input endm ;--------------------------------------------------- ;接收输入字符,判断是ESC,左方向键还是右方向键并进行相应处理 get_char macro ;输入键盘输入的字符 input: mov ah,0 int 16h;BIOS调用,从键盘读字符,ah=扫描码 cmp ah,4Bh;判断字符是否为左方向键 jnz no_win1 pos_curse lx,ly mov winnum,0 jmp input no_win1: cmp ah,4Dh;判断输入字符是否为右方向键 jnz no_win2 pos_curse rx,ry mov winnum,1 jmp input no_win2: cmp ah,01;判断输入字符是否为esc jnz c1 mov ah,4ch;结束本程序,回到DOS系统 int 21h endm ;--------------------------------------------------- codes segment assume cs:codes,ds:datarea start: main proc far push ds sub ax,ax push ax mov ax,datarea mov ds,ax clear scroll 11,5,10,15,30 scroll 11,5,50,15,70 scroll 5,18,15,22,65 pos_curse 15,50 get_char c1: mov ah,0ah mov bh,0;第0页 mov cx,1;重复次数 int 10h;输出al里面的字符 display ;--------------------------------------------------- main endp ;--------------------------------------------------- codes ends ;--------------------------------------------------- end start
编译及运行结果
问题及收获
对于实验3.4,清屏,卷屏,光标定位等部分在书上都有实例讲解,比较容易,对于接收字符,显示字符部分就需要自己动动脑,动动手去实现,这部分主要是参考自己在网上查找的资料实现的。所以整体来说,好好读书,理解起来不难,实现的话也没有遇到特别的困难。
相关文章推荐
- 为什么这个汇编程序,不能在屏幕上面显示!
- 汇编如何建立窗口程序
- java 如何让程序窗口随屏幕大小改变
- 汇编语言:请写一个程序把当前目录下的TEXT.TXT文件中的字符读出来显示在屏幕上,当遇到结束符时就停止读取。
- ibm 在 UNIX 和 Linux 系统上捕获屏幕快照和程序交互: 第 2 部分,简单的图形化屏幕和窗口捕获
- 用汇编编写屏幕保护程序
- Source Insight查看ARM汇编源程序 && Source Insight打开project窗口出错 && 高亮显示程序 && 标题栏显示全路径
- Win32汇编——第一个窗口程序
- 汇编语言 实验5 编写,调试具有多个段的程序(转载)
- 另一个类型的窗口汇编程序及反汇编程序
- 没事情。。把今天实验搞定的冒泡法排序汇编程序晒晒好了
- 王爽汇编 实验12编写0号中断处理程序
- 汇编语言(王爽)》(第九章、实验8分析一个奇怪的程序)学习笔记
- java 如何让程序窗口随屏幕大小改变
- win32汇编窗口程序设计[05]-获取屏幕分辨率
- [转]用汇编编写屏幕保护程序
- ;王爽汇编第七章节 实验6实践课程中的程序
- Win32汇编程序——一个窗口函数
- 第十五周实验报告2(分数四则运算窗口程序)
- 在屏幕上显示ASCII表--汇编上机实验