`
mixer_a
  • 浏览: 364373 次
社区版块
存档分类
最新评论

【原创】DOS下TSR程序的汇编演示代码1--自动按键程序

 
阅读更多
我喜欢在DOS下用QE.EXE来阅读文本文件,自已按键手痛。于是写了个自动向键盘缓冲区放UP
和DOWN键值的程序。
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 文件名: AutoKey.asm
; 功 能: 自动向键盘缓冲区填充RIGHT 或 DOWN 键值 来移动光标
; Ctrl + Tab 停止填充
; Ctrl + →   填充RIGHT 键值
; Ctrl + ↓   填充DOWN 键值
; Ctrl + ↑  提高填充速度
; Ctrl + ←   降低填充速度
;
; 作 者: 黄志斌 2003年2月 广西河池
;
; 申 明: 可以自由转载,应保存完整性.且不能用于商业用途
;
; 说 明:
; 1. 第一次运行时常驻内存,再次运行则撤出内存
; 2. 适用于QE.EXE 和 TC.EXE, 不适于 EDIT.COM
; 3. 改进方向:
; A 在屏幕右上角显示当前速度
; B 填充RIGHT 键值时能自动换行
; 开发环境: IBM PC 486, MSDOS7.0(mswin95), MASM生成
; Log
; -----------------------------------------------------------------------
; 2003.02.24 Created, but the result is exception!
; 2003.02.25 
OK!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

cseg segment
;==============================
 org 100h
 assume es: cseg, ss: cseg
 assume cs: cseg, ds: cseg

UP EQU 48h
Left EQU 4bh
RIGHT EQU 4dh
DOWN EQU 50h

Ctrl EQU 04h
Alt EQU 08h
EndKey EQU 4fh
Tab EQU 0Fh
AddKey EQU 0dh
DecKey EQU 0ch

RightDelay equ 10
DownDelay equ 100

;-----------------------------
start: jmp @Init
 ;====================
 Old1cAddr label dword
 Old1cOff dw ?
 Old1cSeg dw ?
 Old09Addr label dword
 Old09Off dw ?
 Old09Seg dw ?
 mcb_evb dw ? ; mcb: Memmory Control Block
 mcb_psp dw ?
 show dw 1
 count dw 0
 FillKey db 0
 time dw 0
 AutoKey label word
 db 00
 KeyCode db RIGHT

 VarLen equ $ - Old1cAddr

;---------------
new09h proc far
 sti
 push ax
 push bx
 push ds

 mov ax, 0040h
 mov ds, ax
 mov bh, ds:[017h]
 push cs
 pop ds
 test bh, Ctrl
 jz @old09
 in al, 60h
 cmp al, Tab ;EndKey
 jne @right
 mov FillKey, 0
 mov KeyCode, 0
 jmp @Old09
@right:
 cmp al, RIGHT
 jnz @down
 mov byte ptr KeyCode, RIGHT
 mov time, RightDelay
 jmp @AutoON
@down:
 cmp al, DOWN
 jnz @up
 mov byte ptr KeyCode, DOWN
 mov time, DownDelay
 jmp @AutoON
@up:
 cmp al, UP
 jnz @left
 cmp word ptr time, 1
 je @Old09
 dec time
 jmp @ClrCount ;jmp @Old09
@left:
 cmp al, LEFT
 jnz @Old09
 cmp word ptr time, 0ffffh
 je @Old09
 inc time
 ;jmp @ClrCount
@AutoON:
 mov FillKey, 1
@ClrCount:
 mov count, 0
@Old09:
 pop ds
 pop bx
 pop ax
 jmp cs:Old09Addr
new09h endp

new1ch proc far
 cmp byte ptr cs:FillKey, 1
 jne @Old1c

 push ds

 push cs
 pop ds
 inc count
 mov ax, time
 cmp ax, count
 jne n1c

 mov count, 0
 push ax
 push bx

 mov ax, 0040h
 mov ds, ax
 cli

 mov bx, word ptr ds:[001ch]
 mov ax, cs: AutoKey
 mov [bx], ax
 inc bx
 inc bx

 cmp bx, 003eh
 jnz @NoTail
 mov bx, 001eh
@NoTail:
 mov ax, bx
 mov bx, 001ch
 mov [bx], ax

 sti
 pop bx
 pop ax
n1c:
 pop ds
@Old1c:
 jmp cs:Old1cAddr
new1ch endp

@Init:
 mov ax, 3509h ; Get current 1ch interrupt vector
 int 21h

 cmp bx, offset new09h ; Has been Intalled?
 jnz @install ; No install

 mov dx, offset strMsgUninstall
 mov ah, 09h
 int 21h

 mov bx, 1ch * 04h ; Restore old 1ch interrupt vector
 xor ax, ax ; to System interrupt vector talbe
 mov ds, ax
 mov ax, es:[Old1cOff]
 mov ds:[bx], ax
 mov ax, es:[Old1cSeg]
 mov ds:[bx+2], ax

 mov bx, 09h * 04h ; Restore old 09h interrupt vector
 mov ax, es:[Old09Off] ; to System interrupt vector talbe
 ;xor ax, ax 
 ;mov ds, ax ; ds must equal 0
 mov ds:[bx], ax 
 mov ax, es:[Old09Seg]
 mov ds:[bx+2], ax

 mov bx, 1 ; Release evirenment parameter block
 mov ax, es:[mcb_evb]
 mov ds, ax
 mov word ptr ds:[bx], 0

 mov ax, es:[mcb_psp] ; Release TSR
 mov ds, ax
 mov word ptr ds:[bx], 0
 mov ax, 4c00h
 int 21h

@install:
 ;mov ax, 3509h ; Get current 1ch interrupt vector
 ;int 21h
 mov Old09Seg, es ; Store current 09h interrupt vector
 mov Old09Off, bx

 mov dx, offset new09h ; Set new 09h interrupt vector
 mov ax, 2509h
 int 21h

 mov ax, 351ch ; Get current 1ch interrupt vector
 int 21h
 mov Old1cSeg, es ; Store current 1ch interrupt vector
 mov Old1cOff, bx

 mov dx, offset new1ch ; Set new 1ch interrupt vector
 mov ax, 251ch
 int 21h

 mov dx, offset strMsgInstall
 mov ah, 09h
 int 21h

 ; Store the address of evirenment parameter block
 mov ax, cs
 dec ax
 mov [mcb_psp], ax ;mov cs:[mcb_psp], ax
 mov bx, 2ch
 mov ax, [bx] ;mov ax, cs:[bx]
 dec ax
 mov cs:[mcb_evb], ax

 mov dx, offset @Init
 add dx, VarLen + 2
 mov cl, 04h
 shr dx, cl
 mov ax, 3100h
 int 21h
 ;====================
 strMsgInstall db 07h, "AutoKey installed!$"
 strMsgUninstall db 07h, "AutoKey uninstalled!$"
cseg ends
 end start
分享到:
评论

相关推荐

    TSR程序作出DOS下的屏幕保护程序.zip_TSR_dos tsr_汇编 高级_汇编源代码

    标题中的“TSR程序作出DOS下的屏幕保护程序”指的是在DOS操作系统环境下,通过创建一个常驻系统内存(Terminable and Stay Resident, TSR)程序来实现屏幕保护功能的技术。这种程序可以在用户离开计算机或者一段时间...

    TSR驻留程序的演示

    在提供的文件列表中,"MIXTSR"可能是这个演示程序的主文件名。这可能是一个汇编语言或C语言编写的程序,用于演示如何创建和管理TSR驻留程序。在DOS环境中,开发者通常会使用汇编语言编写这样的程序,因为它们对内存...

    _TSR程序设计专题研究

    一些经典的TSR程序包括:QEMM内存管理器,它优化了DOS下的内存分配;Norton Commander,提供了强大的文件管理功能;以及Autoexec.bat和Config.sys文件中的各种启动脚本,它们自动运行TSR程序以提高效率。 总的来说...

    一个TSR程序作出DOS下的屏幕保护程序

    在这个特定的案例中,【标题】"一个TSR程序作出DOS下的屏幕保护程序"展示了如何利用TSR技术在古老的DOS环境下创造一种屏幕保护机制。 在20世纪80年代和90年代初,当个人计算机开始流行,DOS操作系统是主流,屏幕...

    DOS TSR 驻留

    1. **避免使用动态内存分配函数**:由于TSR程序在初始化时会释放未驻留的空间(包括堆空间),因此在TSR程序内部不应使用动态内存分配函数(如`malloc`)。如果确实需要内存分配,则应在TSR程序初始化阶段完成,并...

    用汇编编写DOS下的内存驻留程序.doc

    设计DOS下的内存驻留程序,不仅要求对中断系统有深入的理解,还需要掌握中断向量表的管理和修改方法,同时考虑到DOS系统本身的局限性,采取适当的策略以确保程序的稳定性和安全性。通过合理利用硬件和软件中断,...

    TSR 1- 2450

    **TSR 1- 2450**是Traco Power公司推出的一款高效能直流转换器(DC/DC Converter),属于TSR-1系列中的一个型号。该系列的转换器最大特点是其高达96%的转换效率,使得在不加装散热片的情况下即可实现满负载运行,...

    TSR 驻留程序开发 C 语言源码

    TSR(Terminate and Stay Resident)程序是一种在DOS环境下常见的技术,它允许程序在用户关闭后仍然保留在内存中。这样做的主要目的是为了提高程序的启动速度,因为下次运行时,它不再需要从较慢的磁盘加载到内存,...

    tsr.zip_TSR

    1. **TSRASM.ASM**:这是一个汇编语言源代码文件,可能包含了TSR程序的低级部分,如内存管理、中断处理等关键操作。 2. **RESIDENT.C**、**CLOCK.C**、**TSR.C**:这些是C语言源代码文件,分别代表了驻留程序、时钟...

    80x86汇编语言程序设计教程

    第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...

    _TSR常驻程序原理与实例选辑 驻留 程序

    1. TSR程序的基础概念:介绍TSR的起源、作用和基本工作原理。 2. DOS系统编程:详细讲解DOS系统调用、中断处理和内存管理机制。 3. TSR程序设计:如何编写驻留部分,设置中断处理程序,以及如何在程序中嵌入驻留机制...

    小米创始人雷军的汇编代码欣赏

    汇编语言的编写需要对硬件和操作系统有透彻的理解,雷军的代码中还包含了对鼠标驱动的初始化处理,以及针对不同软件版本的修正,比如V2.04增加了使用鼠标驱动软件重置功能,V2.06则修复了在Windows DOS提示符下无法...

    windows环境下32位汇编语言程序设计

    正因为Win32汇编看上去不再那样低级,于是有读者曾经提出:Win32汇编讲的都是用API来写程序,和高级语言差不多,以前在DOS下使用的中断什么的都不能用,所以没有什么新奇的了。还有读者认为本书只不过是MSDN的汇编...

    一个关于内存驻留的汇编源代码

    学习这些源代码可以帮助理解如何在DOS环境下有效地利用有限的内存资源,以及如何编写TSR程序来优化系统的性能。对于那些对早期计算机系统和汇编语言有兴趣的开发者来说,这是一个宝贵的学习资源。

    C440495_TSR-10_2019-10-28.PDF

    生产的TSR-10旋转DIP开关的详细规格说明。 **TSR-10旋转DIP开关主要规格:** 1. **额定电流与电压:** 开关操作时的额定电流为150mA,工作电压为42V DC;在非切换状态下,最大电流为200mA,同样为42V DC。 2. **...

    dos6.22操作系统源代码(完整版).zip

    1. 引导加载:DOS的启动过程始于MBR(主引导记录),这里的代码负责检测硬盘,加载DOS的系统文件到内存,并将控制权交给DOS的实模式代码。 2. 实模式与保护模式:DOS 6.22主要运行在x86架构的实模式下,这是8086...

    汇编时钟代码

    ### 汇编时钟代码知识点解析 #### 一、概述 本文档介绍了一个基于Freescale HCS08系列微控制器(具体型号为MC9S08AW60)的汇编语言实现的时钟程序。该程序利用了硬件定时器TPM2来实现时间的计数,并通过软件逻辑来...

    Tsr.zip_PAT PMT_TSR_dvb-c_tsr ts流_tsr.exe

    标题中的"Tsr.zip_PAT PMT_TSR_dvb-c_tsr ts流_tsr.exe"提到了几个关键术语,包括PAT、PMT、TSR、DVB-C以及ts流和tsr.exe,这些都是与数字视频广播(Digital Video Broadcasting, DVB)技术相关的专业术语。...

Global site tag (gtag.js) - Google Analytics