2

中断10h可以使用的服务太多了,我想问一下我对其中两个感到困惑的问题

首先是,

 AH = 06H SCROLL UP WINDOW
 AH = 07H SCROLL DOWN WINDOW

在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

这里说 BH 用于在窗口底部写空行,但是当我使用此代码时,

MOV AH, 06H
MOV AL, 00H
MOV CX, 00H
MOV DH, 25
MOV DL, 80
INT 10H

并且没有定义 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

这里 BH 等于页码 :confused: ? 正常 DOS 屏幕中的页码是什么意思?

4

1 回答 1

8

我现在无法使用工具进行测试——事实上,你在 DOS 上的实模式汇编中到底在做什么?- 但从记忆中,这些应该是你的答案:

在DOS中编码时向上滚动/向下滚动是什么意思?

“向上滚动”将是“将屏幕上的所有内容向上移动”。AL 中的值由多少决定。例如,当 AL=2 时,“向上滚动”会将屏幕上的所有文本向上移动两行。

“向下滚动”会将其移向另一个方向。

您可以通过适当地设置 CX 和 DX 来移动屏幕的任意部分/窗口。例如,由于屏幕大概有 80x25 个字符,当 CH=1、CL=1、DH=23、DL=78 时,将移动的部分将是整个屏幕,除了每个边缘的一个字符的边框。

作为一种特殊情况,AL=0 将导致整个窗口被清除。


为什么它说 BH 用于在窗口底部写空行?

它说 BH 是编写空行时使用的属性。在文本模式下,偶数地址保存要显示的字符,而奇数地址保存用于显示的属性。BH 将为此调用写入的每个新字符提供属性。

属性主要是角色的前景色和背景色。通过设置背景颜色和清除屏幕,可以有效地用一种颜色填充屏幕。


我想澄清一点关于硬件寄存器的问题。你说

但是当我使用这段代码时,没有定义 BH 的值

请注意,BH 总是有价值的!您只是偶然使用了周围的那个。请将 BH 设置为您需要的任何值。例如 0x07 表示黑色上的普通白色。


正常 DOS 屏幕中的页码是什么意思?

它类似于现代图形编程中的多个屏幕缓冲区(前缓冲区、后缓冲区)。您可以通过调用int 10hAH=05 来切换页面。请参阅Ralf Brown 的中断列表

于 2012-09-09T10:31:46.867 回答