鱼C论坛

 找回密码
 立即注册
查看: 126|回复: 1

[已解决]年份的前两位数字保存在CMOS的RAM的哪个单元

[复制链接]
发表于 2025-3-15 10:18:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

如题。在实验14中,要求用年/月/日 时:分:秒格式输出时间,但是因为RAM第9单元只有1个字节的长度保存年份,所以输出只能输出年份的后两位,比如2025,只能输出25。那么高位的20保存在哪里?
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-31 09:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表