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

📄 clock.asm

📁 时钟
💻 ASM
字号:
STACK segment para stack 'stack'
       db 256 dup (0)
stack ends
data segment para public 'data'
count db 100
tenh db '1'
hour db '3',20h
tenm db '1'
minute db '0'
       db ':'
tens db '5'
second db '0',0dh,'$'
data ends
code segment para public 'code'
start proc far
      assume cs:code
      push ds
      xor ax,ax
      push ax
      mov ah,01
      int 21h
      cli
      cld
      mov ax,0000h
      mov ds,ax
      mov si,0020h
      lodsw
      mov bx,ax
      lodsw
      push ax;seg
      push bx;offset
      mov ax,data
      mov ds,ax
      assume ds:data
      mov ax,0000h
      mov es,ax
      mov di,0020h
      mov ax,offset timer
      stosw
      mov ax,cs
      stosw
      mov al,00110110b
      out 43h,al
      mov ax,11932
      out 40h,al
      mov al,ah
      out 40h,al
      in al,21h
      push ax
      mov al,0fch
      sti
forever: mov dl,0ffh
      mov ah,06
      int 21h
      jz disp
      cmp al,20h
      jz exit
disp:mov dx,offset tenh
      mov ah,9
      int 21h
      mov al,second
waitcha: cmp al,second
      jz waitcha
      jmp forever
exit: cli
      cld
      pop ax
      out 21h,ax
      mov al,36h
      out 43h,al
      mov al,0
      out 40h,al
      out 40h,al
      mov ax,0
      mov es,ax
      mov di,4*8
      pop ax
      stosw
      pop ax
      stosw
      sti
      ret
start endp

timer:push ax
      push cx
      sti
      mov al,count
      dec al
      mov count,al
      jnz int_ret
      mov count,100
      mov al,second
      add al,1
      aaa
      
      mov second,al
      jnc int_ret
      mov al,tens
      adc al,0
      aaa
      and al,0fh
      mov tens,al
      cmp al,6
      jnz int_ret
      mov al,0
      mov tens,al
      mov al,minute
      add al,1
      aaa
      mov minute,al
      jnc int_ret
      mov al,tenm
      adc al,0
      aaa
      and al,0fh
      mov tenm,al
      cmp al,6
      jnz int_ret
      mov al,0
      mov tenm,al

      mov al,tenh
      mov cl,4
      shl al,cl
      mov cl,al
      mov al,hour
      and al,0fh
      or al,cl
      add al,1
      daa
      cmp al,24h
      jz reseth
      mov ch,al
      mov cl,4
      shr al,cl
      or al,30h
      mov tenh,al
      mov al,ch
      and al,0fh
      or al,30h
      mov hour,al
      jmp int_ret
reseth: mov tenh,'0'
        mov hour,'0'
int_ret:
     mov al,second
     and al,0fh
     or al,30h
     mov second,al
     mov al,tens
     and al,0fh
     or  al,30h
     mov tens,al
     mov al,tenm
     and al,0fh
     or al,30h
     mov tenm,al
     mov al,minute
     and al,0fh
     or al,30h
     mov minute,al

     cli
     mov al,20h
     out 20h,al
     pop cx
     pop ax
     iret
code ends
     end start
     

⌨️ 快捷键说明

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