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

📄 tim.asm

📁 一个简单的时钟程序!真的十分简单。简单得不得了。
💻 ASM
字号:
stack      segment stack 'stack'
             dw 32 dup(?)
stack      ends
data       segment
COUNT   DB 18
t db 0
m db 0
s db 0
tn equ 65520
mn equ 1092
sn equ 18
BUFFER  DB 9,0
TENHO   DB '0'
HOUR    DB '0:'
TENMIN  DB '0'
MINUTE  DB '0:'
TENSEC  DB '0'
SECOND  DB '0',0DH,'$'
STORE   DW 0,0
data       ends
code      segment
main      proc far
          assume cs:code,ds:data,ss:stack
          push ds
          mov ax,0
          push ax
          MOV ES,AX
          mov ax,data
          mov ds,ax
          MOV DI,OFFSET STORE   ;保存系统时钟的中断服务程序入口地址
          MOV AX,ES:20H
          MOV [DI],AX
          INC DI
          INC DI
          MOV AX,ES:22H
          MOV [DI],AX	
	mov ah,0
	int 1ah
	xchg ax,dx
	mov dx,cx
	mov cx,tn
	div cx
        mov t,al
        mov ax,dx
        mov cx,mn
        xor dx,dx
        div cx
	mov m,al
	mov ax,dx
	mov cl,18
	div cl
	mov s,al
	xor ah,ah
	aam
	or ax,3030h
	mov TENSEC,ah
	mov SECOND,al
	xor ax,ax
	mov al,m
	aam
	or ax,3030h
	mov TENMIN,ah
	mov MINUTE,al
	xor ax,ax
	mov al,t
	aam
	or ax,3030h
	mov TENHO,ah
	mov HOUR,al
        mov si,offset TENHO
          MOV BH,12H            ;清屏(显示器软中断程序)
          MOV CH,0               ;书本369页“下滚当前页”
          MOV CL,0
          MOV DH,24
          MOV DL,79
          MOV AL,0
          MOV AH,7
          INT 10H
          MOV DI,20H             ;中断程序入口地址送中断向量表
          MOV AX,OFFSET TIMERX
          MOV ES:[DI],AX
          INC DI
          INC DI
          MOV AX,CS
          MOV ES:[DI],AX
FOREVE:   MOV AH,2            ;置光标位置(显示器软中断服务程序)
          MOV BH,0              ;书本368页
          MOV DH,12
          MOV DL,24
          INT 10H
          MOV AH,9              ;显示时:分:秒
          MOV DX,OFFSET TENHO  
          INT 21H
          MOV AL,SECOND        ;等待一秒钟
HERE:     CMP AL,SECOND
          JE HERE
          MOV AH,0BH            ;检查键盘,若有输入则返回
          INT 21H
          INC AL
          JNZ FOREVE
          MOV DI,20H             ;恢复系统时钟的中断向量表
          MOV AX,STORE
          MOV ES:[DI],AX
          INC DI
          INC DI
          MOV AX,STORE+2
          MOV ES:[DI],AX
          ret
main      endp
TIMERX    PROC FAR
          DEC COUNT             ;计数器减一
          JNZ TIMER              ;不到1秒,退出中断
          MOV COUNT,18          ;已到1秒,恢复软件计数器
          INC SECOND             ;秒加1
          CMP SECOND,'9'          ;十秒位是否增1?
          JLE TIMER               ;否,退出中断
          MOV SECOND,'0'         ;秒位置0
          INC TENSEC             ;使秒位加1
          CMP TENSEC,'6'          ;满1分否?
          JL TIMER                ;否,退回中断
          MOV TENSEC,'0'          ;满,十秒为置0
          INC MINUTE             ;分加1
          CMP MINUTE,'9'
          JLE TIMER
          MOV MINUTE,'0'
          INC TENMIN
          CMP TENMIN,'6'          ;满1小时否?
          JL TIMER
          MOV TENMIN,'0'         ;满,十分位置0
          INC HOUR               ;小时加1
          CMP HOUR,'9'
          JA ADJHO
          CMP HOUR,'3'
          JBE TIMER
          CMP TENHO,'1'
          JBE TIMER
          MOV HOUR,'0'
          MOV TENHO,'0'
          JMP TIMER
ADJHO:   INC TENHO
          MOV HOUR,'0'
TIMER:    MOV AL,20H              ;中断结束命令
          OUT 20H,AL
          IRET
TIMERX  ENDP
code      ends
          end main

⌨️ 快捷键说明

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