-1
它应该显示的时间,但什么都不做这个TSR有什么问题?
; PROGRAM FOR TSR FOR CLOCK
.MODEL TINY
.CODE
ORG 100H
START:
JMP INITS ;Jump to initialization portion
ADRS DD ?
TIME1:
PUSH AX
PUSH BX
PUSH CX
PUSH DX ;Save registers
PUSH SI
PUSH DI
PUSH DS
PUSH SS
PUSH ES
PUSHF
MOV AX,0B900H
MOV ES,AX ;Load VRAM address
MOV DI,820
MOV AH,02 ;Get current time
INT 1AH
MOV AL,CH
SHR AL,04 ;Hours in CH
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
MOV AL,CH
AND AL,0FH
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
MOV AL,':'
MOV ES:[DI],AL
ADD DI,02
MOV AL,CL ;Minutes in CL
SHR AL,04
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
MOV AL,CL
AND AL,0FH
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
MOV AL,':'
MOV ES:[DI],AL
ADD DI,02
MOV AL,DH ;Seconds in DH
SHR AL,04H
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
MOV AL,DH
AND AL,0FH
ADD AL,30H
MOV ES:[DI],AL
ADD DI,02
EXIT:
POPF
POP ES
POP SS
POP DS
POP DI ;Restore the registers
POP SI
POP DX
POP CX
POP BX
POP AX
JMP DWORD PTR CS:ADRS ;Jump to restore original address of
;Interrupt in IVT
INITS:
MOV AL,00H ;Clear screen
MOV AH,06H
MOV BH,07H
MOV CX,0000H
MOV DX,1832H
INT 10H
CLI
PUSH CS
POP DS
MOV AH,35H ;Get interrupt address of int 08h
MOV AL,08
INT 21H
MOV WORD PTR ADRS,BX
MOV WORD PTR ADRS+2,ES
MOV AH,25H ;Set new address of int 08 h
MOV AL,08
LEA DX,TIME1
INT 21H
MOV AH,31H ;Request stay resident
LEA DX,INITS ;Load the no. of paragraphs of resident portion
STI ;Restore interrupts
INT 21H
END START
你用什么操作系统?真正的MS-DOS(可能在虚拟机中)或某些MS-DOS模拟器?还要注意,你不应该覆盖中断0x08而是0x1C。你是否已经检查过中断是否被调用?请注意,功能31H DX寄存器中断为0x21包含段落的数量,而不是字节数! –