标题:想请问int 10h 滚动页面资料的方法
只看楼主
kim91013
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2022-3-15
结帖率:0
已结贴  问题点数:20 回复次数:5 
想请问int 10h 滚动页面资料的方法
最近写assembly
要写滚动资料
有一長串資料要翻頁

于是查到int 10h
我使用ah=06h,07h有页面滚动
但是资料没有滚动
想请问板上有没有人能够帮我解答
或是提供范例
搜索更多相关主题的帖子: 方法 页面 资料 滚动 int 
2022-03-15 17:37
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:20 
这个嘛,嗯....
好吧,说不如做,下面是临时捣一个范例.
上或下卷就是设定一个左上和右下的范围(dh,dl,ch,cl),指定卷动列数(al),再调用bios=10h

程式先在屏上输出一列字串,然后读键,按上则上卷,按下则下卷,按上或下都能不超出限制(比如10),按esc离开.
代码有解释,应该很好理解.

程序代码:

 StrY equ 5h            ;字串座标Y
 StrX equ 15h            ;字串座标X
 RollLine equ 10        ;卷动限制
 BoxLY equ StrY         ;卷动范围左上Y
 BoxLX equ StrX            ;卷动范围左上X
 BoxRY equ (StrY +  RollLine)    ;卷动范围右下Y
 RoxRX equ (BoxLX + mydataLen)    ;卷动范围右下X
 Upkey equ 48h            ;上键扫描码
 Downkey equ 50h        ;下键扫描码
 RollUp equ 6            ;上卷函式码
 RollDown equ 7            ;下卷函式码

assume cs:code,ds:data
data segment

 mydata db 'Press Up and down to roll me'    ;字串
 mydataLen equ $ - offset mydata        ;资料长度
 LineNum db 0                    ;字串卷动值(0-卷动限制)
 Rollx db 0                    ;上卷或下卷
data ends

code segment
start:

 mov ax,data

 mov ds,ax

 mov es,ax

 mov ax,0003h            ;设定视讯=3,相当于清空
 int 10h            ;调用BIOS
 mov LineNum,0            ;初始化字串卷动值=0
 mov bh,00             ;显示页
 mov bl,7h            ;颜色值=7,黑底白字
 mov cx,mydataLen        ;字串长
 mov dh,StrY            ;座标y
 mov dl,StrX            ;座标x
 mov bp,offset Mydata        ;字串偏移
 mov ax,1300h            ;输出ES:BP之字串,CX=长,(dl,dh)=(x,y)
 int 10h            ;调用bios

Readkey:

 mov ah,0            ;读键
 int 16h            ;调用bios
 mov al,LineNum            ;取卷动值
 cmp ah,1h            ;是否esc键
 jz exit            ;是,走
 cmp ah,UpKey            ;是否上键
 jnz next1            ;否,继续以下比较
 dec al                ;减al,卷动值
 js Readkey            ;al=负,卷动值=0,不须上卷,重新读键
 mov Rollx,RollUp        ;al不为负,取上卷
 jmp next2            ;
next1: 

 cmp ah,DownKey            ;是否下键
 jnz Readkey            ;否,重新读键
 inc al                ;加al,卷动值
 cmp al,RollLine        ;是否已到卷动上限    
 jae Readkey            ;已到,重新读键
 mov Rollx,RollDown        ;取下卷
next2:

 mov LineNum,al            ;更新卷动值
 mov ah,Rollx            ;取上卷或下卷
 mov bh,0            ;显示页
 mov ch,BoxLY            ;取卷动范围座标左上y
 mov cl,BoxLX            ;取卷动范围座标左上x
 mov dh,BoxRY            ;取卷动范围座标右下y
 mov dl,RoxRX            ;取卷动范围座标右下x
 mov al,1             ;卷动一列
 int 10h            ;调用bios
 jmp Readkey            ;重新读键
exit:

 mov ax,4c00h            ;离开
 int 21h

code ends
end start



2022-03-16 04:51
kim91013
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2022-3-15
得分:0 
您好,谢谢您的回覆  我有看完整个代码了,有个思路想再请教您  
若是我循环打印资料,在行数纪录是否就是抓取cx值去做滚动?
非常感謝您的解答
2022-03-16 18:33
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:0 
al才是決定卷动列数
2022-03-16 19:07
kim91013
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2022-3-15
得分:0 
若是我的资料已经打印超出屏幕范围,ah=06h滚动时,能够帮我把屏幕外的资料滚动上来吗
2022-03-16 22:35
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:0 
回复 5楼 kim91013
屏幕卷动干的是在屏幕范围内的料做卷动,没有显示的怎可以卷?
屏幕之外的东西仍然在你的程式资料区,程式本身应该知道本次输出完了,再往下输出就是。
2022-03-17 02:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508563-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.198039 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved