当前位置: 网学 > 编程文档 > 汇编语言 > 正文

用汇编编写DOS下的内存驻留程序(5):键盘输入扩充程序

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
sp;上面的程序是节省了一点的时间,但是对于和用户界面而言则变得比较不方便,因为把功能键的定义移到汇编语言的程序中.但是可以高法改写这个程序,让它在初次执行时从一个文件装载所定义的字符患上 .这样做并不会改变驻留程序代码的大小,因为装载文件的起始码可以在执行完后抛弃,因此不必占用驻留程序代码的位置.

5.3 单键扩充程序
 以下是单键扩充成命令字符串的程序内容:
 cseg segment
  assume cs:cseg,ds:cseg
  org 100h
 Start:
  jmp Initialize
 Old_Keyboard_IO dd ?
  assume ds:nothing
 New_Keyboard_IO proc far
  sti
  cmp ah,0     ;Is this call a read request?
  je ksRead
  cmp ah,1     ;Is it a status request?
  je ksStat    ;Let original routine
  jmp Old_Keyboard_IO   ;handle remianing subfunction
 ksRead:
  call KeyRead    ;Get next character to return
  iret
 ksStat:
  call KeyStat    ;Return appropriate status
  ret 2     ;Important!!!
 New_Keyboard_IO endp
 KeyRead Proc near
  cmp cs:current,0
  jne ExpandChar
 ReadChar:
  mov cs:current,0   ;Slightly peculiar
  pushf      ;Let original routine
  call Old_Keyboard_IO   ;Determine keyboard status
  cmp al,0
  je Extended
 ReadDone:
  ret
 Extended:
  cmp ah,59     ;Is this character to expand?
  jne ReadDone    ;If not,return it normally
        ;If so,start expanding
  mov cs:current,offset String
 ExpandChar:
  push si
  mov si,cs:current
  mov si,cs:[si]
  inc cs:current
  pop si
  cmp al,0     ;Is this end of string?
  je ReadChar    ;If so,then read a real char?
  ret
 KeyRead endp
 KeyStat proc near
  cmp cs:current,0
  jne FakeStat
  pushf      ;Let original routine
  call Old_Keyboard_IO   ;Determine keyboard
  ret
 FakeStat:
  mov bx,1     ;Fake a "Character ready" by clearing ZF
  cmp bx,0
  ret
 KeyStat  endp
 current  dw 0
 string  db ''masm macro;'',0dh
    db ''link macro;'',0dh
    db ''exe2bin macro.exe macro.com'',0dh,0
 Initialize:
  assume cs:cseg,ds:cseg
  mov bx,cs
  mov ds,bx
  mov al,16h
  mov ah,35h
  int 21h
  mov word ptr Old_Keyboard_IO,bx
  mov word ptr Old_Keyboard_IO,es
  mov dx,offset New_Keyboard_IO
  mov al,16h
  mov ah,25h
  int 21h
  mov dx,offset Initialize
  int 27h
 cseg ends
  end Start

5.4 一般的键盘扩充程序Mactab.asm
  以下和程序可以把由表的查询,将任意娄的扩充键扩充成命令字符串:
 cseg segment
  assume cs:cseg,ds:cseg
  org 100h
 Start:
  jmp Initialize
 Old_Keyboard_IO dd ?
  assum

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号