gpt4 book ai didi

assembly - BIOS 连续两次从不同端口读取同一寄存器

转载 作者:行者123 更新时间:2023-12-03 06:33:53 25 4
gpt4 key购买 nike

我是 assembly 新手。在尝试弄清楚 BIOS 的作用时,我使用 gdb 来跟踪它。然而,我发现了一些对我来说非常奇怪的事情。
代码段是这样的:

[f000:d129]    0xfd129: mov    eax,0x8f
[f000:d12f] 0xfd12f: out 0x70,al
[f000:d131] 0xfd131: in al,0x71
[f000:d133] 0xfd133: in al,0x92
[f000:d135] 0xfd135: or al,0x2
[f000:d137] 0xfd137: out 0x92,al

我想知道为什么 BIOS 会连续从端口 0x71 和 0x92 读取数据。第二条指令会覆盖从端口 0x71 读取的值吗?那为什么要从0x71端口读取呢?

谢谢!

最佳答案

IO口0x70为“CMOS/RTC索引寄存器”,IO口0x71为“CMOS/RTC数据寄存器”。要访问 CMOS 中的某些内容,您应该设置索引,然后读/写数据寄存器。

对于某些 RTC 芯片,如果设置索引但不读取或写入数据寄存器,则芯片将处于未定义状态。这意味着,如果您想为以后设置索引,则必须从数据寄存器中读取数据,以避免现在和以后之间出现“未定义状态”。

换句话说;读取的值不相关 - 读取会产生副作用,而副作用才是重要的。

关于assembly - BIOS 连续两次从不同端口读取同一寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42593957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com