- 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 ;結束源程序
復制代碼
|