当前位置:  技术问答>linux和unix

自制时钟

    来源: 互联网  发布时间:2015-02-17

    本文导语:  如何编制一个自制时钟,要求它在屏幕的右上角显示当时的时间 ,如下所示 00.00.00形式并且能正确进位,24小时应消零。同时,能在DOS下处理各种命令,正确的执行应用程序?                                ...



如何编制一个自制时钟,要求它在屏幕的右上角显示当时的时间 ,如下所示 00.00.00形式并且能正确进位,24小时应消零。同时,能在DOS下处理各种命令,正确的执行应用程序?
                             
                          请各位帮小弟一忙!

|
这是我以前编的一个DOS下键盘锁程序,实现STR功能,驻留UMB内存,你可以改一下
截时钟中断,参照下面的框架改吧。注:在windows下程序失效!
code segment
assume cs:code,ds:code,es:code
org 80h
password db 8 dup(?)
soft_sw dw ?
pointer dw ?
oldkeybio dd ?
sm db 20 dup(?)
sm1 db 40 dup(?)
org 100h
start: jmp init
newkeybio proc far ;这是新的中断例程,你的功能在这实现,自己改
;搞清楚了再改,不改不合你用,改错就死机
push ax
push es
push si
pushf
xor ax,ax
mov es,ax
in al,60h
test al,80h
jnz oldkeyb
jmp cs:soft_sw
soft_sw0:
mov ah,byte ptr es:[0417h]
and ah,0fh
cmp ah,0ch
jnz oldkeyb
cmp al,L
jz a1
oldkeyb:
popf
pop si
pop es
pop ax
jmp cs:oldkeybio
a1:
mov cs:soft_sw,offset soft_sw1
push cx
push di
push bx
mov ax,cs
mov es,ax
lea di,sm1
mov cx,MSLEN
cld
mov ax,0
rep stosw
pop bx
pop di
pop cx
call write
jmp short proc2
soft_sw2:
cmp al,DEL
mov cs:soft_sw,offset soft_sw0
jnz oldkeyb
mov cs:soft_sw,offset soft_sw3
jmp short proc2
soft_sw1:
call write
mov si,cs:pointer
cmp al,cs:[si]
jnz proc2
inc cs:pointer
cmp si,(offset soft_sw)-1
jz proc0
cmp al,CR
jnz proc3
proc0:
push cx
push bx
push ds
mov ax,SF
mov es,ax
mov ax,cs
mov ds,ax
mov di,SFB
lea si,sm1
mov cx,MSLEN
cld
rep movsw
pop ds
pop bx
pop cx
proc1:
mov cs:soft_sw,offset soft_sw2
proc2:
mov cs:pointer,offset password
proc3:
call sound
in al,61h
mov ah,al
or al,80h
out 61h,al
mov al,ah
out 61h,al
mov al,20h
out 20h,al
popf
pop si
pop es
pop ax
iret
soft_sw3:
mov si,cs:pointer
mov cs:[si],al
inc cs:pointer
cmp al,CR
jz proc1
cmp si,(offset soft_sw)-1
jz proc1
jnz proc3
newkeybio endp
sound proc near
push ax
push bx
push cx
in al,61h
mov ah,al
or al,3
out 61h,al
mov cx,0
s:
loop s
mov al,ah
out 61h,al
pop cx
pop bx
pop ax
ret
sound endp
write proc near ;这个过程直接写显存区,VGA适用,看前面的调用方式
push cx
push bx
push ax
push ds
push di
mov ax,SF
mov es,ax
mov ax,cs
mov ds,ax
lea bx,sm
mov di,SFB
lea si,sm1
mov cx,MSLEN
w1:
mov al,ds:[bx]
inc bx
cmp es:[di],al
jz w2
mov ah,es:[di]
mov es:[di],al
mov ds:[si],ah
w2:        
inc si
inc di
cmp byte ptr es:[di],COLOR
jz w3
mov al,es:[di]
mov byte ptr es:[di],COLOR
mov ds:[si],al
w3:        
inc si
inc di
loop w1
pop di
pop ds
pop ax
pop bx
pop cx
ret
write endp
init: ;这里实现驻留内存
mov ah,52h
int 21h
mov ds,es:[bx-2]
mov si,5
mov ax,cs
mov es,ax
mov di,offset bj
cld
mov cx,3
repz cmpsb
jcxz init1
mov di,5
mov si,offset bj
push ds
push es
pop ds
pop es
mov cx,3
rep movsb
mov ax,cs:[02ch]
mov es,ax
mov ah,49h
int 21h
mov ax,cs
mov ds,ax
mov es,ax
mov cx,MSLEN
lea si,mesg
lea di,sm
cld
rep movsb
mov di,offset password
mov si,offset password1
mov cx,8
cld
rep movsb
mov soft_sw,offset soft_sw0
mov pointer,offset password
mov ax,3509h ;中断9,时钟中断可用8即3508h
int 21h
lea si,oldkeybio
mov [si],bx
mov [si+2],es
lea dx,newkeybio
mov ax,2509h ;中断9,时钟中断可用8即2508h
int 21h
lea dx,msg1
mov ah,9
int 21h
lea dx,msg3
mov ah,9
int 21h
lea dx,init
add dx,0fh
mov cx,4
shr dx,cl
mov ax,3100h
int 21h
init1:
mov ax,cs
mov ds,ax
lea dx,msg2
mov ah,9
int 21h
mov ax,4cffh
int 21h

bj db 'lck'
msg1 db 'Keyboard_Lock install'
db ' OK!',0dh,0ah,'$'
msg2 db 'Keyboard_Lock has alr'
db 'eady installed!',0dh
db 0ah
msg3 db 'Press ++ to lock the keyboar'
db 'd!',0ah,0dh
msg4 db 'Press  just afte'
db 'r unlock the keyboard'
db ' to charge the PASSWO'
db 'RD!',0dh,0ah,'$'
mesg db '**Keyboard locked!**'
MSLEN equ $-mesg
password1 db 11h,1fh,23h
db 1ch,4 dup(?)

SF equ 0b800h ;显示内存首地址
SFB equ 164 ;屏幕开始地址,自己改
COLOR equ 0c2h ;颜色
CR equ 1ch
DEL equ 53h
L equ 38
code ends
end start

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在linux开机时自动启动自制的脚本?
  • 布同自制Python函数帮助查询小工具
  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3