CMOS RAM如何用一个字节存储年份

How CMOS RAM stores year in one byte

this website中,我发现CMOS RAM中的年份只存储在一个字节中。

已知一个字节只能容纳0到255,所以我写这段代码来获取09H存储的内容:

assume cs:code,ss:stack

stack segment
    db 64 dup (0)
stack ends

code segment
    start:
    mov ax,stack
    mov ss,ax
    mov sp,64

    mov al,09H
    out 70H,al
    in al,71H

    mov ah,4CH
    int 21H
code ends

end start

我从端口 71H 得到一个 return 值 17H,这是否意味着 CMOS RAM 存储年份 1994 + offset value

如果是,数字 1994 是什么意思?以后CMOS RAM如何存储2249(1994+255)以上的年份?

年份计算取决于您的操作系统和 Epoch 参考日期!

同时检查:System time

示例: DOS (Microsoft) 范围从 1980 年 1 月 1 日到 2099 年 12 月 31 日。

不支持大于 2099 的年份值!

CMOS寄存器09h存放当前世纪的当前年份。
取值范围为 0 到 99。

----------R09--------------------------------  
CMOS 09h - RTC - YEAR  
Desc:   (BCD 00-99, Hex 00-63)  
Notes:  BCD/Hex selection depends on Bit 2 of register B (0Bh) 

它被编码为 BCD(值 0x00 到 0x99)或普通二进制(值 0x00 到 0x63)。
编码由寄存器0xb

的bit2决定
----------R0B--------------------------------  
CMOS 0Bh - RTC - STATUS REGISTER B (read/write)  

Bitfields for Real-Time Clock status register B:  
Bit(s)  Description     (Table C002)  
 7      enable cycle update  
 6      enable periodic interrupt  
 5      enable alarm interrupt  
 4      enable update-ended interrupt  
 3      enable square wave output  
 2      Data Mode - 0: BCD, 1: Binary  
 1      24/12 hour selection - 1 enables 24 hour mode  
 0      Daylight Savings Enable - 1 enables  

在我的系统中,寄存器 0x​​b 的值为 0x2(启用 24 小时,BCD 日期)。
寄存器 0x​​9 读取 0x17 表示 2017 年,这在我的参考框架中对于我的时间线是正确的。