laocaiye 发表于 2025-3-15 10:18:44

年份的前两位数字保存在CMOS的RAM的哪个单元

本帖最后由 laocaiye 于 2025-3-15 10:26 编辑

如题。在实验14中,要求用年/月/日 时:分:秒格式输出时间,但是因为RAM第9单元只有1个字节的长度保存年份,所以输出只能输出年份的后两位,比如2025,只能输出25。那么高位的20保存在哪里?

FishC 发表于 2025-3-15 10:18:53

CMOS RAM 中存储的年份信息分为两部分:

- **低两位年份(如 2025 的 "25")** 存储在 **CMOS RAM 的 0x09 单元**。
- **高两位年份(如 2025 的 "20")** 存储在 **CMOS RAM 的 0x32 单元**(Century Register,世纪寄存器)。

因此,如果你想完整获取 4 位数的年份,需要读取 **0x32 单元** 和 **0x09 单元**,然后拼接它们。例如:

- 读取 0x32 单元,得到 `20`
- 读取 0x09 单元,得到 `25`
- 拼接后得到 `2025`

在 x86 汇编中,你可以使用 `OUT` 和 `IN` 指令访问 CMOS RAM。例如:

MOV AL, 32h   ; 选择 CMOS RAM 的 0x32 单元
OUT 70h, AL
IN AL, 71h    ; 读取世纪信息

MOV AH, AL    ; 存储高两位年份

MOV AL, 09h   ; 选择 CMOS RAM 的 0x09 单元
OUT 70h, AL
IN AL, 71h    ; 读取年份的低两位

; 现在 AH = 高两位年份, AL = 低两位年份

这样,你就可以正确获取完整的 4 位数年份了!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 年份的前两位数字保存在CMOS的RAM的哪个单元