assembly - CMOS RAM 如何以一个字节存储年份

标签 assembly system masm bios

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

enter image description here

众所周知,一个字节只能容纳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 得到返回值 17H,这是否意味着 CMOS RAM 按 1994 + 偏移值存储年份?

如果是这样,数字 1994 是什么意思? future CMOS RAM如何存储超过2249(1994+255)的年份?

最佳答案

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 日期)。
2017 年寄存器 0x​​9 的读数为 0x17,在我的引用框架中,对于我的时间线来说,这是正确的。

关于assembly - CMOS RAM 如何以一个字节存储年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42188327/

相关文章:

c - inode 中的 block 号是什么意思?

assembly - 我的 .exe 程序不是我所期望的

linux - 在 linux x86_64 程序集中生成一个 shell

assembly - 将转换后的数字附加到现有字符串

c++ - Hook ntdll.dll 调用的问题

swift - 在 SceneKit 中创建爆炸粒子系统

assembly - 多定义符号 masm 5.0

visual-studio - Visual Studio (MASM) 程序集 - 为什么即使未调用标签,标签中的代码也会自动执行

assembly - 正确使用CPU寄存器——调度概念

if-statement - 对 MIPS 中的 if 跳转感到困惑