访问 PIT (?) IO 端口 44h 和 46h – 这些端口有什么作用?

我正在反汇编 MS-DOS .com 应用程序并遇到一些我不明白的端口访问。更准确地说,通过该IN指令,从以下端口读取值。

40h
44h
46h

此处找到的文档提到端口40h-47h属于“可编程间隔计时器”,但详细信息仅在端口上详细说明40h-43h

从反汇编的上下文中,我猜想输入然后用作伪随机数。

我还发现这个参考(德语)没有提到其他 4 个端口。有没有人知道这些端口的确切功能,最好有参考?

编辑:为了提供更多上下文,反汇编的应用程序部分如下所示。

in  al, 46h
mov cl, 03h
div cl
mov bl, ah

in  al, 44h
div cl
mov bh, ah

mov dx, 40h
in  al, dx
div cl

应用就是这种微小的效果;读取值用于将 VGA 调色板 RGB 值设置为最好的颜色,最坏的情况下有趣。

回答

你的猜测似乎是正确的。该代码尝试设置随机颜色。由于它是 256 字节介绍的一部分,因此重点主要是代码大小,而不是随机数的可移植性或质量。可能这个可执行文件最初是为 PS/2 或 EISA 系统设计的,定时器 0、3 和 5(第二个芯片的通道 0 和 2)是自由运行的。如果您没有 EISA 系统,通常别名会再次访问计时器 0、0 和 2。该程序不启用声音,因此计时器 2 会卡住。此外,通过在 1CA 处执行 MUL 指令,在 1BE 处由 DIV 指令生成的代码破坏了 AH,因此不使用从端口 40h 读取的值。

要了解的不仅仅是这种有根据的猜测,您需要联系该代码的作者。考虑到 AH 被破坏的 bug,似乎代码是在一个演示派对上在时间压力下创建的,并没有太多的“设计”进入其中。这似乎更像是“它运作良好”。


以上是访问 PIT (?) IO 端口 44h 和 46h – 这些端口有什么作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>