如何使用 x86 BIOS 调用移动光标?
How to move the cursor with x86 BIOS calls?
我正在学习“操作系统从 0 到 1”一书中的一些操作系统教程。其中一项练习是将光标设置到引导加载程序屏幕上的某个位置。但是,无论我怎么尝试,光标都停留在左上角的相同位置。
为了让事情更混乱,在书中,它提到在引发中断 10h 之前我需要设置的寄存器是 bh
用于 Y 坐标,bl
用于 X 坐标。维基百科提到 bh
用于页码,dh
和 dl
用于行和列。这些方法都不适合我。
这是我正在使用的功能(使用书法):
MovCursor:
pusha
mov ah, 0x02
mov bh, 0x1
mov bl, 0x4
int 0x10
popa
任何帮助告诉我我做错了什么的人将不胜感激。
维基百科注册设置正确。从您的说法“这些方法都不适合我”,我得出的结论是您也尝试过维基百科版本。很遗憾我无法验证您的代码,因为您没有将其包含在您的问题中。
关于光标的几点考虑:
- 在图形屏幕上,永远不会呈现光标。坐标改变但它保持不可见1。在文本屏幕上,光标默认为闪烁的下划线。
- 光标的坐标(列和行)从零开始。屏幕的左上角在(0,0)。
- 如果将光标移出屏幕,光标将会消失。
- 您可以使用 BIOS.SetCursorType 功能 01h 更改光标的形状。你也可以这样让它消失!
下一段代码在屏幕中间显示一串彩色 A:
mov ax, 0003h ; BIOS.SetVideoMode 80x25 16-color text
int 10h
mov dx, 0C23h ; DH is Row (12), DL is Column (35)
mov bh, 0 ; DisplayPage
mov ah, 02h ; BIOS.SetCursorPosition
int 10h
mov cx, 10 ; ReplicationCount
mov bx, 002Fh ; BH is DisplayPage (0) , BL is Attribute (BrightWhiteOnGreen)
mov ax, 0941h ; BIOS.WriteCharacterAndAttribute, AL is ASCII ("A")
int 10h
mov ah, 00h ; BIOS.WaitKeyboardKey
int 16h ; -> AX
1 对于一些 轻度阅读 How can I add a blinking cursor to the graphics video modes?
我正在学习“操作系统从 0 到 1”一书中的一些操作系统教程。其中一项练习是将光标设置到引导加载程序屏幕上的某个位置。但是,无论我怎么尝试,光标都停留在左上角的相同位置。
为了让事情更混乱,在书中,它提到在引发中断 10h 之前我需要设置的寄存器是 bh
用于 Y 坐标,bl
用于 X 坐标。维基百科提到 bh
用于页码,dh
和 dl
用于行和列。这些方法都不适合我。
这是我正在使用的功能(使用书法):
MovCursor:
pusha
mov ah, 0x02
mov bh, 0x1
mov bl, 0x4
int 0x10
popa
任何帮助告诉我我做错了什么的人将不胜感激。
维基百科注册设置正确。从您的说法“这些方法都不适合我”,我得出的结论是您也尝试过维基百科版本。很遗憾我无法验证您的代码,因为您没有将其包含在您的问题中。
关于光标的几点考虑:
- 在图形屏幕上,永远不会呈现光标。坐标改变但它保持不可见1。在文本屏幕上,光标默认为闪烁的下划线。
- 光标的坐标(列和行)从零开始。屏幕的左上角在(0,0)。
- 如果将光标移出屏幕,光标将会消失。
- 您可以使用 BIOS.SetCursorType 功能 01h 更改光标的形状。你也可以这样让它消失!
下一段代码在屏幕中间显示一串彩色 A:
mov ax, 0003h ; BIOS.SetVideoMode 80x25 16-color text
int 10h
mov dx, 0C23h ; DH is Row (12), DL is Column (35)
mov bh, 0 ; DisplayPage
mov ah, 02h ; BIOS.SetCursorPosition
int 10h
mov cx, 10 ; ReplicationCount
mov bx, 002Fh ; BH is DisplayPage (0) , BL is Attribute (BrightWhiteOnGreen)
mov ax, 0941h ; BIOS.WriteCharacterAndAttribute, AL is ASCII ("A")
int 10h
mov ah, 00h ; BIOS.WaitKeyboardKey
int 16h ; -> AX
1 对于一些 轻度阅读 How can I add a blinking cursor to the graphics video modes?