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

📄 time.txt

📁 打字记时程序
💻 TXT
字号:
stack    segment para stack 'stack' 
         db  256  dup(0) 
top      label word 
stack    ends 
data     segment  para public 'data' 
buffer   db 16h dup(0) 
bufpt1   dw 0 
bufpt2   dw 0 
kbflag   db  0 
prompt   db '   *please practise typing*',0dh,0ah,'$' 
scantab  db 0,0,'1234567890-=',8,0 
         db 'qwertyuiop[]',0dh,0 
         db 'asdfghjkl;',0,0,0,0 
         db 'zxcvbnm,./',0,0,0 
         db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0 
         db '789-456+1230.' 
even 
oldcs9   dw ? 
oldip9   dw ? 
str1     db 'abcd efgh ijkl mnop qrst uvwx yz.' 
         db 0dh,0ah,'$' 
str2     db 'there are some newspapers on the table.' 
         db 0dh,0ah,'$' 
str3     db 'there are some clouds in the sky.' 
         db 0dh,0ah,'$' 
str4     db 'she always eats her lunch at noon.' 
         db 0dh,0ah,'$' 
str5     db 'i do not like autumn and winter.' 
crlf     db 0dh,0ah,'$' 
colon    db ':','$' 
even 
saddr    dw str1,str2,str3,str4,str5 
count    dw 0 
sec      dw 0 
min      dw 0 
hours    dw 0 
save_lc  dw 2 dup(?) 
data     ends 
code     segment 
  assume   cs:code,ds:data,es:data,ss:stack 
main     proc far 
start: 
         mov ax,stack 
         mov ss,ax 
         mov sp,offset top 
 
         push ds 
         sub ax,ax 
         push ax 
         mov ax,data 
         mov ds,ax 
         mov es,ax 
 
        ; mov ah,0 
        ; mov al,4 
        ; int 21h 
        ; mov ah,0bh 
       ;  mov bh,0 
       ;  mov bl,4 
       ;  int 11h  
         mov ah,35h 
         mov al,09h 
         int 21h 
         mov oldcs9,es 
         mov oldip9,bx 
 
         push ds 
         mov dx,seg kbint 
         mov ds,dx 
         mov dx,offset kbint 
         mov al,09h         
         mov ah,25h 
         int 21h 
         pop ds 
 
         mov ah,35h 
         mov al,1ch 
         int 21h 
         mov save_lc,bx 
         mov save_lc+2,es 
 
         push ds 
         mov dx,seg clint 
         mov ds,dx 
         mov dx,offset clint 
         mov al,1ch 
         mov ah,25h 
         int 21h 
         pop ds 
 
         in  al,21h 
         and al,11111100b 
         out 21h,al 
    
          
first:   mov ah,0 
         mov al,3 
         int 10h 
 
         mov dx,offset prompt 
         mov ah,9 
         int 21h 
 
         mov si,0 
next:    mov dx,saddr[si] 
         mov ah,09h 
         int 21h 
 
         mov count,0 
         mov sec,0 
         mov min,0 
         mov hours,0 
 
         sti 
forever: 
         call kbget 
         test kbflag,80h 
         jnz  endint 
         push ax 
         call dispchar 
         pop  ax 
         cmp al,0dh 
         jnz forever 
         mov al,0ah 
         call dispchar 
 
         call disptime 
         lea dx,crlf 
         mov ah,09h 
         int 21h 
 
         add si,2 
         cmp si,5*2 
         jne next 
         jmp first 
endint:  cli 
         push ds 
         mov dx,save_lc 
         mov ax,save_lc+2 
         mov ds,ax 
         mov al,1ch 
         mov ah,25h 
         int 21h 
         pop ds 
 
         push ds 
         mov dx,oldip9 
         mov ax,oldcs9 
         mov ds,ax 
         mov al,09h 
         mov ah,25h 
         int 21h 
         pop ds 
 
         sti 
         ret 
main     endp 
clint    proc near 
         push ds 
         mov bx,data 
         mov ds,bx 
 
         lea bx,count 
         inc word ptr[bx] 
         cmp word ptr[bx],18 
         jne return 
         call inct 
adj: 
         cmp hours,12 
         jle return 
         sub hours,12 
return: 
         pop ds 
         sti 
         iret 
clint    endp 
inct     proc near 
         mov word ptr[bx],0 
         add bx,2 
         inc word ptr[bx] 
         cmp word ptr[bx],60 
         jne exit 
         call inct 
exit:    ret 
inct     endp 
disptime proc near 
         mov ax,min 
         call bindec 
 
         mov bx,0 
         mov al,':' 
         mov ah,0eh 
         int 10h 
         mov ax,sec 
         call bindec 
 
         mov bx,0 
         mov al,':' 
         mov ah,0eh 
         int 10h 
 
         mov bx,count 
         mov al,55d 
         mul bl 
         call bindec 
 
         ret 
disptime      endp 
bindec   proc near 
         mov cx,100d 
         call decdiv 
         mov cx,10d 
         call decdiv 
         mov cx,1 
         call decdiv 
         ret 
bindec   endp 
decdiv   proc near 
         mov dx,0 
         div cx 
 
         mov bx,0 
         add al,30h 
         mov ah,0eh 
         int 10h 
 
         mov ax,dx 
         ret 
decdiv   endp 
kbget    proc near 
         push bx 
         cli 
         mov bx,bufpt1 
         cmp bx,bufpt2 
         jnz kbget2 
         cmp kbflag,0 
         jnz kbget3 
         sti 
         pop bx 
         jmp kbget 
kbget2: 
         mov al,[buffer+bx] 
         inc bx 
         cmp bx,16h 
         jc kbget3 
         mov bx,0 
kbget3: 
         mov bufpt1,bx 
         pop bx 
         ret 
kbget    endp 
kbint    proc near 
         push bx 
         push ax 
 
         in al,60h 
         push ax 
         in al,61h 
         or al,80h 
         out 61h,al 
         and al,7fh 
         out 61h,al 
 
         pop ax 
         test al,80h 
         jnz  kbint2 
         mov bx,offset scantab 
         xlat scantab 
         cmp al,0 
         jnz kbint4 
         mov kbflag,80h 
         jmp kbint2 
kbint4: 
         mov bx,bufpt2 
         mov [buffer+bx],al 
         inc bx 
         cmp bx,16h 
         jc kbint3 
         mov bx,0 
kbint3: 
         cmp bx,bufpt1 
         jz kbint2 
         mov bufpt2,bx 
kbint2:  cli 
         mov al,20h 
         out 20h,al 
         pop ax 
         pop bx 
         sti 
         iret 
kbint    endp 
dispchar proc near 
         push bx 
         mov bx,0 
         mov ah,0eh 
         int 10h 
         pop bx 
         ret 
dispchar endp 
code     ends 
         end   start 

⌨️ 快捷键说明

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