#2
Valenciax2022-03-16 04:51
这个嘛,嗯....
好吧,说不如做,下面是临时捣一个范例. 上或下卷就是设定一个左上和右下的范围(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 只有本站会员才能查看附件,请 登录 |
最近写assembly
要写滚动资料
有一長串資料要翻頁
于是查到int 10h
我使用ah=06h,07h有页面滚动
但是资料没有滚动
想请问板上有没有人能够帮我解答
或是提供范例