⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsr时钟.txt

📁 会变语言实现的一些程序
💻 TXT
字号:
我自己编写了一个TSR的小时钟, 但是发现驻留后再卸载, 卸载后使用mem查看, 发现clock已经不在了, 然后再次运行, 然后使用mem查看, 发现有两分clock, 再卸载clock, 并使用mem
查看,发现剩下还有一个clock. 为什么?

;dos 小时钟程序     
code segment
assume cs:code, ds:code, ss:code
org 100h
start:
     jmp install
flag db  'INT1CH',0
old1ch dw 0, 0

int1ch:
      push ax
      push cx
      push bx
      push dx
      push ds 
      
      mov ax, 0b800h
      mov ds,ax     
      mov cx, 8
      xor bx, bx
lop1:      
      inc bx
      mov [bx], byte ptr 1fh
      inc bx
      loop lop1
      
      mov ah,2
      int 1ah
      
      mov ah,cl
      mov cl, 4
      mov al, ch
      
      shr al, cl
      add al,30h            
      mov ds:[0], al
      
      mov al, ch
      and al, 0fh
      add al, 30h
      mov ds:[2], al
      
      mov ds:[4], byte ptr ':'
      mov al, ah
      
      shr al, cl
      add al,30h
      mov ds:[6], al
      
      mov al,ah
      and al, 0fh
      add al, 30h
      mov ds:[8], al
      
      mov ds:[10], byte ptr ':'
      mov al, dh
      
      shr al, cl
      add al, 30h
      mov ds:[12], al
      
      mov al, dh
      and al, 0fh
      add al, 30h
      mov ds:[14], al
      
      pop ds
      pop dx
      pop bx
      pop cx
      pop ax
      iret

uninstall:
      push ds
      push es
      push cs
      pop ds
      cli
      mov ax,251ch
      mov dx, old1ch
      mov cx, old1ch+2
      mov ds, cx
      int 21h
      sti     
      mov ax, cs:[2ch]
      mov es, ax
      mov ax, 4900h
      int 21h         ;释放环境块内存
      mov ax, cs
      mov es, ax
      mov ax, 4900h 
      int 21h         ;释放程序主体内存
      pop es
      pop ds
      retf
install:
             
       mov ax, 351ch
       int 21h
       mov old1ch, bx
       mov old1ch+2, es ;保存int 1ch的向量

       lea si, flag
       mov di, bx
       sub di, int1ch-flag
       cld
       mov cx, 6
lop:  
       cmpsb
       jnz nequal
       loop  lop         ;验证是否已经安装该程序
       jmp equal
nequal: ;没有安装就安装
       push ds

       push cs
       pop ds
       cli
       lea dx, int1ch
       mov ax, 251ch
       int 21h
       sti
       pop  ds
       
       mov ah,9
       lea dx, err_msg2
       int 21h         ;显示安装信息
       mov ax,3100h
       lea dx, install
       mov cl,4
       shr dx,cl
       inc dx
       int 21h
equal:    ;说明已经安装了, 应该卸载
       add old1ch, uninstall-int1ch ;计算卸载程序的入口
       call dword ptr old1ch
       lea dx, err_msg
       mov ah,9
       int 21h
       int 20h   ;结束程序
err_msg db 'Clock uninstalled!$',0
err_msg2 db 'Clock installed!$',0
code ends
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -