拖着拖把去拖鞋 发表于 2023-2-28 22:35:01

实验14

无言
assume cs:code

data segment
         db '2000/00/00 00:00:00','$'
         db 2,5,8,11,14,17               ; 对应年、月、日、时、分、秒的偏移地址
         db 9,8,7,4,2,0                  ; 对应年、月、日、时、分、秒在CMOS RAM中的位置
data ends

code segment
    start:   movax,data
             movds,ax
             movsi,0            ; 定位字符串
             movdi,20         ; 定位偏移地址
             movbp,26         ; 定位时间信息的位置

             movcx,6
    l0:      moval,ds:      ; 获取年份
             call get_time
             movsi,ds:
             andsi,0FFH         ; 数据是8位的,留下低8位
             movds:,ah
             movds:,al

             incdi
             incbp
             loop l0

             movah,2            ; 置光标
             movbh,0            ; 第0页
             movdh,12         ; dh中放行号
             movdl,30         ; dl中放列号
             int10h

             movdx,0
             movah,9            ; 在光标位置显示字符串
             int21h

             movax,4c00h
             int21h

    ; 功能: 返回时间的十进制形式
    ; 参数: (al)=内存位置
    ; 返回: (ah)=数据的十位数
    ;      (al)=数据的个位数
    get_time:push cx
             out70h,al
             in   al,71h
             movah,al         ; al中从CMOS RAM的指定单元中读出的数据
             movcl,4
             shrah,cl         ; ah中为数据的十位
             andal,00001111b    ; al中为数据的个位
             addah,30h          ; 转换为十进制ASCII码
             addal,30h          ; 转换为十进制ASCII码
             popcx
             ret
code ends

end start
页: [1]
查看完整版本: 实验14