- DIS MACRO LOCAT,CODE ;设置图形显示宏定义
- PUSH DX
- PUSH BX
- PUSH AX
- MOV DX,LOCAT ;设置光标位置
- MOV BH,00
- MOV AH,02H
- INT 10H
- MOV DL,CODE ;输出字符串
- MOV AH,02H
- INT 21H
- POP AX
- POP BX
- POP DX
- ENDM
- DAT SEGMENT ;设置数据段
- BUF DB 'INPUT START RESET END CONTINUE
- ;设置功能说明
- BUFFER DB 10 DUP(?) ;定义缓存区
- TIP DB 'M E M O R Y
- ;定义记忆提示
- NUM DB 1
- LOD EQU 0929H
- DAT ENDS
- COD SEGMENT ;定义代码段
- START PROC FAR
- ASSUME CS:COD,DS:DAT
- MOV AX,DAT
- MOV DS,AX
- MOV DX,OFFSET BUF ;输出功能说明
- MOV AH,09H
- INT 21H
- CALL DISMER ;记忆区提示符置光标
- MOV DX,OFFSET TIP ;输出记忆提示字符
- MOV AH,09H
- INT 21H
- CALL CLR ;图形区清屏并设置颜色
- CALL CLRDAT ;秒表数字区清屏并设置颜色
- CALL CLRMER ; 记忆区清屏并设置颜色
- DIS 0419H,'<' ;通过宏调用显示图形
- DIS 0517H,'<'
- DIS 0715H,'<'
- DIS 0914H,'<'
- DIS 0B14H,'<'
- DIS 060EH,'_'
- DIS 0710H,'_'
- DIS 0812H,'_'
- DIS 0913H,'_'
- DIS 0A14H,'_'
- DIS 0915H,'_'
- DIS 0816H,'_'
- DIS 0718H,'_'
- DIS 061AH,'_'
- DIS 071CH,'*'
- DIS 081EH,'*'
- DIS 091FH,'*'
- DIS 0B20H,'*'
- DIS 0D21H,'*'
- DIS 0F21H,'*'
- DIS 1120H,'*'
- DIS 131FH,'*'
- DIS 141EH,'*'
- DIS 151DH,'*'
- DIS 161BH,'*'
- DIS 1719H,'*'
- DIS 1717H,'_'
- DIS 1616H,'_'
- DIS 1514H,'_'
- DIS 1612H,'_'
- DIS 1711H,'_'
- DIS 170EH,'*'
- DIS 160CH,'*'
- DIS 150BH,'*'
- DIS 140AH,'*'
- DIS 1309H,'*'
- DIS 1108H,'*'
- DIS 0F07H,'*'
- DIS 0D07H,'*'
- DIS 0B08H,'*'
- DIS 0909H,'*'
- DIS 080AH,'*'
- DIS 070CH,'*'
- DIS 0C12H,'_'
- DIS 0C13H,'_'
- DIS 0C14H,'_'
- DIS 0C15H,'_'
- DIS 0C16H,'_'
- CALL GO ;设置初植
- LOAD: CALL IOSET ;光标定位
- CALL HALT ;等待输入
- MOV DX,0
- MOV CH,0
- AGAIN:
- CALL TIME ;调用延时程序
- MOV AL,DL ;百分之一秒加一
- ADD AL,1
- DAA
- JC NEXT1 ;满一百进位
- MOV DL,AL
- JMP DISPY ;不满一百显示
- NEXT1: MOV DL,0
- MOV AL,DH ;秒位加一
- ADD AL,1
- DAA
- MOV DH,AL
- CMP AL,60H
- JNE DISPY
- CALL BELL ;满60提示铃声并进位
- MOV DH,0
- MOV AL,CH ;分位加一
- ADD AL,1
- DAA
- MOV CH,AL
- CMP AL,60H
- JNE DISPY ;满60清零
- MOV CH,0
- DISPY: ;显示电子秒表
- MOV BX,OFFSET BUFFER ;取缓冲区地址
- MOV AL,CH
- CALL TRAN ;将分位转变为ASCII码并送缓冲区
- INC BX
- INC BX
- MOV AL,DH ;将秒位转变为ASCII码并送缓冲区
- CALL TRAN
- INC BX
- INC BX
- MOV AL,DL ;将百分之一秒位转变为ASCII码并送缓冲区
- CALL TRAN
- PUSH BX
- PUSH CX
- PUSH DX
- CALL IOSET ;光标置位
- MOV DX,OFFSET BUFFER ;输出缓冲区字符串
- MOV AH,09H
- INT 21H
- POP DX
- POP CX
- POP BX
- MOV AH,0BH ;等待键盘输入
- INT 21H
- AND AL,AL
- JZ AGAIN
- MOV AH,08H
- INT 21H
- CMP AL,'R' ;判断输入是否为R
- JNE NEXT2 ;不是则判断是否为E
- CALL MEMORY ;若是则调用记忆功能保存当前值
- MOV CH,0 ;初值清零重新计数
- MOV DL,0
- MOV DH,0
- JMP AGAIN
- NEXT2:
- CMP AL,'E' ;判断是否为E
- JNE AGAIN ;不是则继续计数
- NEXT3: ;若是则暂停计数
- MOV AH,08H
- INT 21H
- CMP AL,'C' ;判断是否输入C
- JE AGAIN ;若是则继续计数
- CMP AL,'R' ;判断是否输入R
- JNE NEXT3 ;若不是则继续等待输入
- CALL MEMORY ;若是则调用记忆功能
- CALL GO ;重新设置初值等待重新启动
- CALL IOSET
- MOV DX,OFFSET BUFFER
- MOV AH,09H
- INT 21H
- JMP LOAD
- RET
- START ENDP
- GO PROC ;设置初值子程序
- MOV BX,OFFSET BUFFER
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,':'
- MOV [BX],AL
- INC BX
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,':'
- MOV [BX],AL
- INC BX
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,'0'
- MOV [BX],AL
- INC BX
- MOV AL,'
- MOV [BX],AL
- RET
- GO ENDP
- IOSET PROC
- MOV DX,0F10H
- MOV BH,00
- MOV AH,02H
- INT 10H
- RET
- IOSET ENDP
- HALT PROC
- MOV AH,08H
- INT 21H
- CMP AL,'S'
- JNE HALT
- RET
- HALT ENDP
- TRAN PROC ;十六进制转ASCII码子程序
- MOV CL,AL
- SHR AL,1
- SHR AL,1
- SHR AL,1
- SHR AL,1
- OR AL,30H
- MOV [BX],AL
- INC BX
- MOV AL,CL
- AND AL,0FH
- OR AL,30H
- MOV [BX],AL
- RET
- TRAN ENDP
- TIME PROC ;延时子程序
- PUSH CX
- PUSH AX
- MOV AX,0EFH
- MOV CX,0FFFFH
- A1:
- DEC AX
- JNZ A2
- JMP A3
- A2:
- DEC CX
- JNZ A2
- JMP A1
- A3:
- POP AX
- POP CX
- RET
- TIME ENDP
- MEMORY PROC ;记忆功能子程序
- PUSH DX
- PUSH BX
- PUSH AX
- CMP NUM,10
- JE X2
- ADD NUM,1
- X1:
- MOV DX,LOD
- ADD DH,NUM
- MOV BH,00
- MOV AH,02H
- INT 10H
- MOV DX,OFFSET BUFFER
- MOV AH,09H
- INT 21H
- POP AX
- POP BX
- POP DX
- RET
- X2: CALL CLRMER
- MOV NUM,1
- JMP X1
- MEMORY ENDP
- CLR PROC ;图形区清屏并设置颜色子程序
- MOV AH,06H
- MOV AL,14H
- MOV CX,0401H
- MOV DX,1721H
- MOV BH,0CH
- INT 10H
- RET
- CLR ENDP
- CLRDAT PROC ;数据区清屏并设置颜色子程序
- MOV AH,6
- MOV AL,1
- MOV CX,0F10H
- MOV DX,0F18H
- MOV BH,0BH
- INT 10H
- RET
- CLRDAT ENDP
- CLRMER PROC ;记忆区清屏并设置颜色子程序
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- MOV AH,6
- MOV AL,11
- MOV CX,0929H
- MOV DX,0F32H
- MOV BH,0DH
- INT 10H
- POP DX
- POP CX
- POP BX
- POP AX
- RET
- CLRMER ENDP
- DISMER PROC ;记忆提示显示子程序
- MOV AH,02H
- MOV BH,00
- MOV DX,0728H
- INT 10H
- RET
- DISMER ENDP
- BELL PROC ;满分钟提示音设置子程序
- PUSH AX
- PUSH DX
- MOV AL,07H
- MOV DL,AL
- MOV AH,02H
- INT 21H
- POP DX
- POP AX
- RET
- BELL ENDP
- COD ENDS ;结束代码段
- END START ;结束源程序
复制代码
|