要求编写一个时钟程序,时钟信号放在屏幕右上角并在程序结束后常驻内存
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: CODE
ORG 0100H
START:
JMP MAIN
NEW_08H_SERVICE PROC
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, CODE
MOV DS, AX
MOV AH, 2
INT 1AH
CMP DH, SEC
JZ E_NEW_08
MOV HOUR, CH
MOV MIN, CL
MOV SEC, DH
MOV AH, 3
MOV BL, 0
INT 10H
PUSH DX
MOV CURSOR, 0047H
CALL SET_CURSOR
MOV AL, HOUR
CALL W_2_CHAR
MOV AL, ':' - 30H
CALL W_1_CHAR
MOV AL, MIN
CALL W_2_CHAR
MOV AL, ':' - 30H
CALL W_1_CHAR
MOV AL, SEC
CALL W_2_CHAR
MOV AH, 2
POP DX
INT 10H
E_NEW_08:
POP DX
POP CX
POP BX
POP AX
POP DS
JMP CS: OLD08
CURSOR DW ?
SEC DB ?
MIN DB ?
HOUR DB ?
OLD08 DD ?
NEW_08H_SERVICE ENDP
SET_CURSOR PROC
MOV DX, CURSOR
INC DX
MOV CURSOR, DX
MOV AH, 2
INT 10H
RET
SET_CURSOR ENDP
W_2_CHAR PROC
PUSH AX
MOV CL, 4
SHR AL, CL
AND AL, 0FH
CALL W_1_CHAR
POP AX
AND AL, 0FH
CALL W_1_CHAR
RET
W_2_CHAR ENDP
W_1_CHAR PROC
MOV AH, 9
ADD AL, 30H
MOV BL, 1EH
MOV BL, 2FH
MOV CX, 1
INT 10H
CALL SET_CURSOR
RET
W_1_CHAR ENDP
MAIN:
MOV AX, CODE
MOV DS, AX
CLI
MOV AX, 3508H
INT 21H
MOV WORD PTR OLD08, BX
MOV WORD PTR OLD08 + 2, ES
MOV AX, 2508H
MOV DX, OFFSET NEW_08H_SERVICE
INT 21H
STI
MOV DX, OFFSET MAIN
INT 27H
CODE ENDS
END START