3

我无法理解如何使用一些旧的 VGA 代码在此示例中设置序列控制器寄存器:

 mov     dx,SC_INDEX
 mov     ax,0604h
 out     dx,ax   ;disable chain4 mode

该示例来自 Michael Abrash 的 VGA 书籍:https ://www.phatcode.net/res/224/files/html/ch47/47-02.html

根据描述,他想设置位于索引 4 的内存模式寄存器。他想禁用位于位索引 3 的 chain4(全部根据 Richard F. Ferraro 的 EGA、VGA 和超级 VGA 卡程序员指南)。

我不明白他为什么将 2 个字节 06 和 04 放入 ax 和out它们。out寄存器只有一个字节,他没有明确设置寄存器的索引来寻址。是不是发生了一些我不明白的魔法?

4

1 回答 1

5

I/O 端口是 8 位的,但 2/4 个连续端口也可以视为单个 16/32 位端口 - 该out指令将同时写入SC_INDEXSC_INDEX+1

您可以检查例如。Intel 80386 Reference Programmer's Manual's section on I/ Oaddressing for the port width thing, osdev.org 甚至在讨论特定端口时似乎特别提到了这种做法。

于 2021-07-30T18:16:39.913 回答