mic*_*ler 1 video assembly interrupt
有这么多的服务可以用于中断10h,我想问一下他们中的两个与我混淆的问题
首先是,
AH = 06H SCROLL UP WINDOW
AH = 07H SCROLL DOWN WINDOW
Run Code Online (Sandbox Code Playgroud)
在DOS中编码时,向上滚动/向下滚动是什么意思?
看看这个,
; AL = NUMBER OF LINES BY WHICH TO SCROLL UP (00H = CLEAR ENTIRE WINDOW)
; BH = ATTRIBUTE USED TO WRITE BLANK LINES AT BOTTOM OF WINDOW
; CH,CL = ROW,COLUMN OF WINDOW'S UPPER LEFT CORNER
; DH,DL = ROW,COLUMN OF WINDOW'S LOWER RIGHT CORNER
Run Code Online (Sandbox Code Playgroud)
这里它说BH用于在窗口底部写入空行,但是当我使用此代码时,
MOV AH, 06H
MOV AL, 00H
MOV CX, 00H
MOV DH, 25
MOV DL, 80
INT 10H
Run Code Online (Sandbox Code Playgroud)
并没有定义BH的值,我的结果将不会显示在屏幕上,一旦我声明Bh的值,它实际上是控制DOS屏幕的前景色和背景色.那么为什么说BH用于在窗口底部写下空行?
第二是,
;AH = 02 USED To SET CURSOR POSITION
;BH = PAGE NUMBER
;CH,CL = ROW,COLUMN OF WINDOW'S UPPER LEFT CORNER
;DH,DL = ROW,COLUMN OF WINDOW'S LOWER RIGHT CORNER
Run Code Online (Sandbox Code Playgroud)
这里BH等于页码:confused:?普通DOS屏幕中的页码是什么意思?
我现在无权使用工具进行测试 - 事实上,你在DOS上的实模式组装中做了什么? - 但是从记忆中,这些应该是你的答案:
在DOS中编码时,向上滚动/向下滚动是什么意思?
"向上滚动"将"获取屏幕上的所有内容并将其向上移动".AL中的值决定了多少.例如,当AL = 2时,"向上滚动"会将屏幕上的所有文本向上移动两行.
"向下滚动"会将其向另一个方向移动.
您可以通过适当设置CX和DX来移动屏幕的任意窗口/窗口.例如,由于屏幕可能具有80×25个字符,当CH = 1,CL = 1,DH = 23,DL = 78时,除了沿每个边缘的一个字符的边界之外,将被移动的部分将是整个屏幕.
作为一种特殊情况,AL = 0将导致整个窗口被清除.
为什么说BH用于在窗口底部写下空行?
它说BH是写空行时使用的属性.在文本模式下,偶数地址保存要显示的字符,而奇数地址保存用于显示的属性.BH将为此调用所写的每个新字符赋予属性.
属性主要是角色的前景色和背景色.通过设置背景颜色并清除屏幕,您可以使用一种颜色有效地填充屏幕.
我想澄清一下有关硬件寄存器的观点.你说
但是当我使用这个代码时,并没有定义BH的值
请注意BH总是有价值的!你只是偶然使用那个躺着的人.请将BH设置为您需要的任何东西.例如,对于黑色的正常白色,为0x07.
普通DOS屏幕中的页码是什么意思?
它类似于现代图形编程中的多屏幕缓冲区(前缓冲区,后缓冲区).您可以通过呼叫int 10h
AH = 05 来切换页面.请参阅Ralf Brown的中断列表.