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

📄 clock.asm

📁 时钟模拟汇编算法
💻 ASM
字号:
data    SEGMENT
COUNT   DW      1
FLAG    DB      1
MESS    DB      30h,30h,':',30h,30h,':',30h,30h,0dh,24h
info1   DB      0dh,0ah,'1. Set Time$'
info2   DB      0dh,0ah,'2. Continue$'
info3   DB	  0dh,0ah,'3. Quit$'
info4   DB  	  0dh,0ah,'MENU$'
info5   DB	  0dh,0ah,'Choice:$'
infohour	DB	0dh,0ah,'Please enter hour:',0dh,0ah,'$'
infominu	DB	0dh,0ah,'Please enter minute:',0dh,0ah,'$'
infoseco	DB	0dh,0ah,'Please enter second:',0dh,0ah,'$'
hour	 DB	  3,?,3 dup('$')
minute  DB	  3,?,3 dup('$')
second  DB	  3,?,3 dup('$')
data    ends

code    segment
        assume  cs:code,ds:data
time    proc    near
        push    ds
        push    ax
        push    cx
        push    dx
        mov     ax,data
        mov     ds,ax
        sti
        cmp     flag,1
        jnz	  exit
        dec     count
        jnz     exit
        mov     dx,offset mess
        mov 	  ah,09h
        int     21h
        lea     si,mess
        inc     byte ptr[si+7]
        cmp     byte ptr[si+7],39h
        jbe     next
        inc     byte ptr[si+6]
        mov     byte ptr[si+7],30h
next:
        cmp     byte ptr[si+6],35h
        jbe     next1
        inc     byte ptr[si+4]
        mov     byte ptr[si+6],30h
next1:  
	 cmp     byte ptr[si+4],39h
	 jbe	  next2
	 inc	  byte ptr[si+3]
	 mov	  byte ptr[si+4],30h
next2:
	 cmp	  byte ptr[si+3],35h
	 jbe 	  next3
	 inc 	  byte ptr[si+1]
	 mov	  byte ptr[si+3],30h
next3:
	 cmp	  byte ptr[si+1],39h
	 jbe 	  next4
	 inc 	  byte ptr[si]
	 mov	  byte ptr[si+1],30h
next4:
	 cmp	  byte ptr[si],31h
	 jbe	  next5
	 cmp	  byte ptr[si+1],34h
	 jnz  	  next5
	 mov  	  byte ptr[si],30h
	 mov	  byte ptr[si+1],30h
next5:      
        mov     count,18
exit:   cli
        pop     dx
        pop     cx
        pop     ax
        pop     ds
        iret
time    endp

main    proc    far
        push    ds
        xor     ax,ax
        push    ax
        mov     ax,data
        mov     ds,ax
        mov     ax,351ch
        int     21h
        push    es
        push    bx
        push    ds
        pushf
        lea     si,mess
        mov	  ah,2ch
        int 	  21h
        call	  convert
        popf
        mov     dx,offset time
        mov     ax,seg time
        mov     ds,ax
        mov     ax,251ch
        int     21h
        pop     ds
        in      al,21h
        and     al,0feh
        out     21h,al
delay:
	 mov 	  ah,0h
	 int 	  16h
	 cmp	  al,1bh
	 jz	  menu
        jmp     delay
menu:
	 push	  ax
	 
	 mov	  flag,0

	 mov     dl,0ah
	 mov	  ah,02h
	 int	  21h
	 mov	  dl,0dh
	 int	  21h

	 lea	  dx,info4
	 mov	  ah,09h
	 int	  21h
	 lea	  dx,info1
	 int	  21h
	 lea	  dx,info2
	 int 	  21h
	 lea	  dx,info3
	 int 	  21h
	 lea	  dx,info5
	 int 	  21h

reenter:
	 mov 	  ah,08h
	 int 	  21h
	 sub	  al,30h
	 cmp	  al,1
	 jz	  set1
	 cmp	  al,2
	 jnz	  nextset1
	 jmp	  set2
nextset1:
	 cmp	  al,3
	 jnz	  nextset2
	 jmp	  set3
nextset2:
	 jmp	  reenter
set1:
	 lea	  dx,infohour
	 mov	  ah,09h
	 int 	  21h
rehour:
	 lea	  dx,hour
	 mov	  ah,0ah
	 int 	  21h
	 cmp	  hour+1,2
	 jnz	  rehour
	 cmp	  hour+2,30h
	 jb	  rehour
	 cmp	  hour+2,32h
	 ja	  rehour
	 cmp	  hour+3,30h
	 jb	  rehour
	 cmp	  hour+3,39h
	 ja	  rehour
	 cmp	  hour+2,32h
	 jne	  nospecial
	 cmp	  hour+3,33h
	 ja	  rehour
nospecial:	 
	 mov	  al,hour+2
	 mov	  byte ptr[si],al
	 mov	  al,hour+3
	 mov	  byte ptr[si+1],al

	 lea	  dx,infominu
	 mov	  ah,09h
	 int 	  21h
reminute:
	 lea	  dx,minute
	 mov	  ah,0ah
	 int 	  21h
	 cmp	  minute+1,2
	 jnz	  reminute
	 cmp	  minute+2,30h
	 jb	  reminute
	 cmp	  minute+2,35h
	 ja	  reminute
	 cmp	  minute+3,30h
	 jb	  reminute
	 cmp	  minute+3,39h
	 ja	  reminute
	 mov	  al,minute+2
	 mov	  byte ptr[si+3],al
	 mov	  al,minute+3
	 mov	  byte ptr[si+4],al

	 lea	  dx,infoseco
	 mov	  ah,09h
	 int 	  21h
resecond:
	 lea	  dx,second
	 mov	  ah,0ah
	 int 	  21h
	 cmp	  second+1,2
	 jnz	  resecond
	 cmp	  second+2,30h
	 jb	  resecond
	 cmp	  second+2,35h
	 ja	  resecond
	 cmp	  second+3,30h
	 jb	  resecond
	 cmp	  second+3,39h
	 ja	  resecond
	 mov	  al,second+2
	 mov	  byte ptr[si+6],al
	 mov	  al,second+3
	 mov	  byte ptr[si+7],al

	 mov	  dl,0ah
	 mov 	  ah,02h
	 int	  21h
	 mov	  dl,0dh
	 int 	  21h
	 mov	  dl,0ah
	 int	  21h
	 mov	  dl,0dh
	 int	  21h
	 mov	  flag,1
	 jmp	  delay
set2:
	 mov	  dl,0ah
	 mov 	  ah,02h
	 int	  21h
	 mov	  dl,0dh
	 int 	  21h
	 mov	  dl,0ah
	 int	  21h
	 mov	  dl,0dh
	 int	  21h
	 mov	  flag,1
	 jmp	  delay
set3:
	 mov	  flag,0
	 pop	  ax
        pop     dx
        pop     ds
        ret
        
convert proc near
	 push    ax
	 mov	  al,ch
	 mov 	  ah,0
	 call    sixteentoten
	 mov	  [si],al
	 mov	  [si+1],ah

	 mov     al,cl
	 mov     ah,0
	 call    sixteentoten
	 mov	  [si+3],al
	 mov     [si+4],ah

	 mov	  al,dh
	 mov	  ah,0
	 call	  sixteentoten
	 mov	  [si+6],al
	 mov	  [si+7],ah
	 
	 pop	  ax
	 ret

sixteentoten proc near
	 push 	  cx
	 mov	  cl,10
	 div	  cl
	 add     ax,3030h
	 pop     cx
	 ret
sixteentoten endp

convert endp

main    endp
code    ends
        end     main

⌨️ 快捷键说明

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