zhzh macro reg ;宏:将reg中的低8位转化成10进制的字符保存在AX中。
push bx
mov ax,reg
xor ah,ah
mov bl,10
div bl
add ax,3030h
pop bx
endm
assume cs:code,ds:code
code segment
old9 dd ?
hhhh db ?,?,':'
mmmm db ?,?,':'
ssss db ?,?,'$'
new9: pushf
pushf
call DWORD ptr cs:old9
sti
push bx
push ax
push dx
push cx
mov ah,1
int 16h
jz nret
cmp ah,01h
jnz nret ;按ESC
mov ah,0ch
int 21h
mov ah,2ch ;取时间
int 21h
zhzh cx
mov WORD ptr mmmm,ax
xchg cl,ch
zhzh cx
mov WORD ptr hhhh,ax
xchg dl,dh
zhzh dx
mov WORD ptr ssss,ax
mov dx,offset hhhh
mov ah,9
int 21h
nret:
pop cx
pop dx
pop ax
pop bx
popf
iret
start:
push cs
pop ds
mov ax,3509h
int 21h
mov WORD ptr old9,bx
mov WORD ptr old9+2,es ;保存旧中断
mov dx,offset new9 ;设置新中断
mov ax,2509h
int 21h
mov dx,offset start
add dx,15
mov cl,4
shr dx,cl
add dx,10h
mov ah,31h ;结束并驻留
int 21h
code ends
end start |