如何解决字大小的 OUT 到字节 IO 寄存器?使用旧 VGA 代码中的指令设置序列控制器寄存器
我无法理解本示例中如何使用一些旧的 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 编写的 EGA、VGA 和超级 VGA 卡的程序员指南F.费拉罗)。
我不明白为什么他将 2 个字节 06 和 04 放入 ax 和 out
中。输出寄存器只有一个字节,他没有明确设置寄存器的索引以进行寻址。是不是发生了一些我不明白的魔法?
解决方法
I/O 端口是 8 位的,但 2/4 个连续的端口也可以被视为一个 16/32 位的端口 - out
指令将同时写入 SC_INDEX
和SC_INDEX+1
。
您可以检查例如。 Intel 80386 Reference Programmer's Manual's section on I/O addressing 关于端口宽度的事情,osdev.org 甚至似乎特别提到了 when discussing that specific port 的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。