assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
call init_reg
testA: call show_month
jmp testA
mov ax, 4C00H
int 21H
;================================================
init_reg:
mov bx, 0B800H
mov es, bx
ret
;================================================
show_month:
mov al, 0
out 70H, al ; 读取cmos的0 地址的内容
in al, 71H ; 将读取的1个字节存到al寄存器
mov ah, al
shr ah, 1
shr ah, 1
shr ah, 1
shr ah, 1
and al, 00001111B
add ah, 30H
add al, 30H
mov di, 160*10+40*2
mov es:[di], ah
mov es:[di+2], al
ret
code ends
end start
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
TIME_STYLE: db 'YY/MM/DD HH:MM:SS',0
TIME_CMOS: db 9,8,7,4,2,0
start: mov ax, stack
mov ss, ax
mov sp, 128
call show_time_style
call show_clock
mov ax, 4C00H
int 21H
;======================================================
show_clock:
showTime: mov si, OFFSET TIME_CMOS
mov di, 160*10 + 30*2
mov cx, 6
showDate: mov al, ds:[si]
out 70H, al
in al, 71H
mov ah, al
shr ah, 1
shr ah, 1
shr ah, 1
shr ah, 1
and al, 00001111B
add ah, 30H
add al, 30H
mov es:[di], ah
mov es:[di+2], al
inc si
add di, 6
loop showDate
jmp showTime ; 无限循环
ret
;=======================================================
show_string:
push dx
push ds
push es
push si
push di
showString: mov dl, ds:[si]
cmp dl, 0
je showStringRet
mov es:[di], dl
add di, 2
inc si
jmp showString
showStringRet:
pop di
pop si
pop es
pop ds
pop dx
ret
;========================================================
show_time_style:
mov si, OFFSET TIME_STYLE
mov di, 160*10 + 30*2
mov ax, cs
mov ds, ax
mov ax, 0B800H
mov es, ax
call show_string
ret
code ends
end start