⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ti.asm

📁 显示系统日期时间。参数 d 表示显示日期
💻 ASM
字号:
; TIMER WITH 2 KINDS OF FONT
; FORMAT:
;     TI [n] [d]
;  n: 0-1
;  d: show date

code    segment
	assume  cs:code
	org     100h
begin:  jmp     start
color   db      0ah
numbase dw      3030h
vidoff  dw      0
vidbase dw      0B800h
optp    db      0

setend  label   byte

datechg db      1
btw     db      ':'
hour    db      0
min     db      0
sec     db      0
lastsec db      0
year    db      0
month   db      0
day     db      0

chgit   proc    near
	div     bx
        mov     cs:[si], al
        inc     si
	ret
chgit   endp

showdigit   proc    near
        mov     al, cs:[si]
        xor     ah, ah
	div     bl
	or      ax, cs:numbase-0d0h
	push    ax
	mov     ah, cs:color-0d0h
	stosw
	pop     ax
	mov     al, ah
	mov     ah, cs:color-0d0h
	stosw
        inc     si
	ret
showdigit   endp

twopo   proc    near
        mov     ah, cs:color-0d0h
        mov     al, cs:btw-0d0h
	stosw
	ret
twopo   endp

int08h:
	cmp     ax, 4c4ch
	jnz     cont0
	cmp     bx, 0c4c4h
	jnz     cont0
	xchg    ax, bx
	push    cs
	pop     es
	iret
cont0:
	push    ax
	push    bx
	push    dx
	push    di
        push    si
	push    ds
	push    es

        cld     ; set video address
        mov     ax, cs:vidbase-0d0h
	mov     es, ax
        mov     di, cs:vidoff-0d0h

        xor     ax, ax  ; get time counter
	mov     ds, ax
	mov     ax, ds:[46ch]
        mov     dx, ds:[46eh]
        cmp     ax, 00
        jnz     notchgdate
        cmp     dx, 00
        jnz     notchgdate
        mov     cs:datechg-0d0h, 1
notchgdate:
        shr     dx, 1   ; get hour, min, sec
	rcr     ax, 1
	mov     bx, 32772
        mov     si, offset hour-0d0h
	call    chgit
	mov     ax, dx
	mov     bx, 10
	mul     bx
	mov     bx, 5460
	call    chgit
	mov     ax, dx
	xor     dx, dx
	mov     bx, 91
	call    chgit

        cmp     al, cs:lastsec-0d0h
        jz      timeend
        mov     cs:lastsec-0d0h, al

        mov     si, offset cs:hour-0d0h
        mov     cs:btw-0d0h, ':'
        mov     bl, 10

        cmp     cs:optp-0d0h, 1
        jnz     showing
        test    al, 2
        jnz     showing

showdate:
        cmp     cs:datechg-0d0h, 0
        jz      skiploaddate

        mov     al, 7
        out     70h, al
        in      al, 71h
        mov     cs:day-0d0h, al
        mov     al, 8
        out     70h, al
        in      al, 71h
        mov     cs:month-0d0h, al
        mov     al, 9
        out     70h, al
        in      al, 71h
        mov     cs:year-0d0h, al
        mov     cs:datechg-0d0h, 0

skiploaddate:
        mov     si, offset year-0d0h
        mov     cs:btw-0d0h, '-'
        mov     bl, 16

showing:
        call    showdigit
        call    twopo
        call    showdigit
        call    twopo
        call    showdigit

timeend:
	pop     es
	pop     ds
        pop     si
	pop     di
	pop     dx
	pop     bx
	pop     ax
	db      0eah
oldip   dw      0
oldcs   dw      0

info    db      0dh,0ah
	db      '谀哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?,0dh,0ah
	db      '?           ON-LINE CLOCK              ?,0dH,0aH
	db      '?   Zhang Jiu Qiang, 1996 in ZunYi     ?,0dh,0ah
	db      '滥哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?,0dh,0ah,'$'

info1   db      'TI [1] [d]'
        db      '$'

lcdnumbit       label   byte
LCD0    DB      0,1EH,21H,21H,21H,21H,21H,21H,0  ,21H,21H,21H,21H,21H,21H,1EH
LCD1    DB      0,  0,1  ,1  ,1  ,1  ,1  ,1  ,0  ,1  ,1  ,1  ,1  ,1  ,1  ,0
LCD2    DB      0,1EH,1  ,1  ,1  ,1  ,1  ,1  ,1EH,20H,20H,20H,20H,20H,20H,1EH
LCD3    DB      0,1EH,1  ,1  ,1  ,1  ,1  ,1  ,1EH,1  ,1  ,1  ,1  ,1  ,1  ,1EH
LCD4    DB      0,  0,21H,21H,21H,21H,21H,21H,1EH,1  ,1  ,1  ,1  ,1  ,1  ,0
LCD5    DB      0,1EH,20H,20H,20H,20H,20H,20H,1EH,1  ,1  ,1  ,1  ,1  ,1  ,1EH
LCD6    DB      0,1EH,20H,20H,20H,20H,20H,20H,1EH,21H,21H,21H,21H,21H,21H,1EH
LCD7    DB      0,1EH,1  ,1  ,1  ,1  ,1  ,1  ,0  ,1  ,1  ,1  ,1  ,1  ,1  ,0
LCD8    DB      0,1EH,21H,21H,21H,21H,21H,21H,1EH,21H,21H,21H,21H,21H,21H,1EH
LCD9    DB      0,1EH,21H,21H,21H,21H,21H,21H,1EH,1  ,1  ,1  ,1  ,1  ,1  ,1EH

        db      'COLOR'
color0  db      0ah
        db      'YPOS'
cordy   db      0
        db      'XPOS'
cordx   dw      72

start:
        mov     al, cs:cordy
	mov     bl, 80
	mul     bl
        add     ax, cs:cordx
	mov     di, ax
	shl     di, 1
        mov     cs:vidoff, di

        mov     al, cs:color0
        mov     cs:color, al

	mov     di, 80h
	cmp     byte ptr [di], 2
        jb      skippp
repskp:
	inc     di
comp1:
	cmp     byte ptr [di], 20h
	jz      repskp

	cmp     byte ptr ds:[di], '1'
        jnz     noskip
        cmp     byte ptr ds:[di+1], 20h
        ja      wrong
	mov     bp, offset lcdnumbit
pointnum:
	mov     ax, cs
	mov     ds, ax
	mov     es, ax
	mov     ax, 1100h
	mov     bx, 1000h
	mov     cx, 10
	mov     dx, 0a0h
	int     10h
	mov     ds:numbase, 0a0a0h
compdj:
	inc     di
	cmp     byte ptr [di], 20h
        jz      compdj
noskip:
        cmp     byte ptr ds:[di], 0dh
        jz      skippp

        or      byte ptr ds:[di], 20h
        cmp     byte ptr ds:[di], 'd'
        jnz     wrong
        cmp     byte ptr ds:[di+1], 20h
        ja      wrong
        mov     cs:optp, 1      ; show date
        jmp     repskp
wrong:
        mov     ah, 9
        mov     dx, offset info1
	int     21h
        mov     ah, 4ch
        int     21h
skippp:
	mov     ah,09
	mov     dx, offset info
	int     21h
	mov     ax, 4c4ch
	mov     bx, 0c4c4h
	int     08h
	cmp     ax, 0c4c4h
	jnz     cont1
	cmp     bx, 4c4ch
	jz      already
cont1:
	xor     ax, ax
	mov     ds, ax
	mov     ax, ds:[08h*4]
	mov     cs:oldip, ax
	mov     ax, ds:[08h*4+2]
	mov     cs:oldcs, ax
	cli
	mov     ds:word ptr [08h*4], offset int08h - 0d0h       ; offset
	mov     ds:word ptr [08h*4+2], cs
	mov     ax, cs
	mov     ds, ax
	mov     di, 30h                         ;dest
	mov     si, 100h                        ;source
	mov     cx, offset info - 100h          ;length
	cld
	rep     movsb
	sti

	mov     ax, cs:[2ch]
	dec     ax
	mov     ds, ax
	mov     word ptr ds:[01], 0000h

	mov     dx, offset info - 0d0h          ;resident length, 计算驻留长度
	add     dx, 0fh				;info 以后的内容不驻留
	mov     cl, 4				;右移4位,因为放在DX中的长度是以16字节为单位的。
	shr     dx, cl				;即驻留长度是 DX * 16
	mov     ah, 31h				;DOS系统调用,驻留功能
	int     21h
already:
	mov     ax, ds:numbase
	mov     es:numbase-0d0h, ax
        mov     al, ds:optp
        mov     es:optp-0d0h, al
	mov     ah, 4ch
	int     21h
code    ends
	end     begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -