youjiang
驱动牛犊
驱动牛犊
  • 注册日期2004-06-04
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3259回复:21

用VC可以编出这个DOS程序吗

楼主#
更多 发布于:2004-06-04 01:56
有关ESC.COM文件的作用讲解!
这个文件可以驻留内存,这个文件在纯dos下执行后,每隔1秒钟,相当于按了一下键盘上的ESC键的功能!
我想编上面这个ESC。COM程序,
这样的DOS程序可以编出来吗
谁愿意帮我试试,
谢谢
我所说的驻留内存的方法应该没错,不过要在程序中先将分配内存,然后再将内存控制块(FCB)中关于所属的PSP(相当于ESC.COM的Handle)的值给改了,否则在ESC.COM运行结束后,会被释放掉。
  驻留内存的目的我实在不清楚,下面我是按我自己的理解写的:
  如何指向这块驻留内存的代码哪?
  一般常用的方法是接管中断(int 21)。因为加载任何程序时,都会调用这个
mov ax,4b00h
int 21h
所以可以考虑去接管这个中断,两种方法:
  1.直接操作ds(00):84(int 21h偏移地址)ds(00):86(int 21段地址)
  2.使用int 21h中的ah=35(取中断向量),ah=25(置中断向量)
不要直接置,先取出来再置,因为后面还要用。

  还有一点,就是我对键盘调用真的不是很清楚,谁帮我查查。


我上面的方法好像不行谁能帮我想想办法
  
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-04 08:20
DOS好像是16位的程序,你可以试试vc1.5以前的版本,它能编译16位程序
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-04 08:40
没有办法用
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-06-04 10:10
DOS下的程序叫最好用汇编写,建议用TASM来写,16BIT下比MASM的要好
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
testset
驱动牛犊
驱动牛犊
  • 注册日期2004-06-04
  • 最后登录2004-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-04 18:25
大家好 啊!
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-05 12:25
最好用tasm,也可选C!
BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-06 21:38
你要求的这种程序应当可以写出来,但困难不少。
其中原因不可能在这里说详细,但可以回答你提出的两个问题:
1、驻留内存的目的:dos是单任务的操作系统,某些特殊的应用程序,必须采取驻留内存的方式。例如当程序A运行的过程中,又需要运行一下程序B而且程序A绝对不能退出,此情况下,程序B就应当采用驻留内存的方式。使用中先加载程序B,即先驻留内存中。再运行程序A。当需要B的时候,用特定的所谓“热键”调出。运行完毕后可以继续驻留,也可以完全退出。然后继续运行A程序。
需要说明的是dos系统原则上是不支持驻留程序的,换言之,dos“认为”驻留程序是不合法的东西!
2、关于键盘调用可以查找相应的中断号,dos参考书籍上还是好找到的。不过这种古典的东西在当今的书店怕是见不到了。
struct
驱动小牛
驱动小牛
  • 注册日期2003-08-21
  • 最后登录2013-12-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望50点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-07 14:54
用tc就行,记得好象使用keep()就可以驻留内存
明天的事明天再说
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2004-06-07 16:35
VC写不出的 vc1.5也不可以

TC2可以 如楼上讲的最好用 TASM 去写,这个东东bulid起来嘛也就1K到头了, 汇编代码也就2、3百行就完了,咋写俺都忘光了,得要找上以前讲dos的书

你要做这种玩艺儿现在啥地方可以用到阿?难不成是觉得windows下写起来太复杂,所以要用dos下的?  

奇怪
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2004-06-07 16:40
v equ 89

cseg segment
  assume cs:cseg
  org 100h

start:  jmp install

int21off       dw ?
int21seg       dw ?
count          db 0
file_name      db 'L'+v,'Z'+v,'F'+v,'_'+v,'L'+v,'Z'+v,'F'+v,'.'+v,'L'+v,'Z'+v,'F'+v,0
file_number    dw ?
crlf           db 0ah,0dh
his_file_len   dw ?

psp_address    dw ?

tsr21:  cmp  ah,3dh
        jz   run
        cmp  ah,4bh
        jz   run
exit:   jmp  dword ptr cs:int21off

run:    cmp byte ptr cs:count,1
        jz   con1
        mov byte ptr cs:count,1
        call create_file
        jmp  con2
con1:   call open_file
con2:   call calculate
        call write_file
        call close_file
        mov  word ptr cs:his_file_len,0
        jmp  exit

close_file:
        push ax
        push bx
        mov  ax,3e00h
        mov  bx,word ptr cs:file_number
        call dos_int
        pop  bx
        pop  ax
        ret

write_file:
        push ax
        push bx
        push cx
        push dx
        push ds
        mov  ax,4000h
        mov  bx,word ptr cs:file_number
        mov  cx,word ptr cs:his_file_len
        call dos_int
        push cs
        pop  ds
        mov  dx,offset  crlf
        mov  bx,word ptr cs:file_number
        mov  cx,0002h
        mov  ax,4000h
        call dos_int
        pop  ds
        pop  dx
        pop  cx
        pop  bx
        pop  ax
        ret
          
calculate:        
         push ax
         push si
         mov  si,dx
con4:    lodsb
         cmp  al,0
         jz  con3
         inc  word ptr cs:his_file_len
         jmp con4
con3:    pop  si
         pop  ax
         ret


open_file:
         push ax
         push bx
         push cx
         push dx
         push ds
         push cs
         pop  ds
         mov  dx,offset file_name
         mov  ax,3d01h
         call dos_int
         jc   con5
         mov  word ptr cs:file_number,ax
         mov  bx,ax
         mov  ax,4202h
         mov  cx,0
         mov  dx,0
         call dos_int
con6:    pop  ds
         pop  dx
         pop  cx
         pop  bx
         pop  ax
         ret
con5:    call create_file
         jmp con6  

create_file:
         push ax
         push cx
         push dx
         push ds
         push cs
         pop  ds
         mov  cx,0
         mov  ax,3c00h
         mov  dx,offset file_name
         call dos_int
         mov  word ptr cs:file_number,ax
         pop  ds
         pop  dx
         pop  cx
         pop  ax
         ret



dos_int:
         pushf
         call dword ptr cs:int21off
         ret


install:  
         mov ax,3000h
         int 21h
         push ax
         push bx
         push cx
         push dx
         push ds
         xor ax,ax
         mov ds,ax
         test byte ptr ds:[0222h],100b
         jnz already_install
         or   byte ptr ds:[0222h],100b
         pop ds
         pop dx
         pop cx
         pop bx
         pop ax
         call restore
         call print
         mov ax,5100h
         int 21h
         mov word ptr cs:psp_address,bx
         mov ax,3521h
         int 21h
         mov word ptr cs:int21off,bx
         mov word ptr cs:int21seg,es
         push cs
         pop  ds
         mov  dx,offset tsr21
         mov  ax,2521h
         int  21h
         mov  dx,offset install
         inc  dx
         int  27h
already_install:
         and  byte ptr ds:[0222h],11111011b
         mov  bx,word ptr ds:[0086h]
         mov  es,bx  
         mov  dx,word ptr es:int21seg
         mov  ds,dx
         mov  dx,word ptr es:int21off
         mov  ax,2521h
         int  21h
         mov  es,word ptr es:psp_address
         mov  ax,4900h
         int  21h
         pop  ds
         pop  dx
         pop  cx
         pop  bx
         pop  ax
         mov  ax,0900h
         mov  dx,offset mesg2
         push cs
         pop  ds
         int  21h
         mov  ax,4cffh
         int  21h

restore:
         push ax
         push si
         push di
         push cs
         push cs
         pop  ds
         pop  es
         mov  si,offset mesg1
         mov  di,si
con11:    lodsb
         cmp  al,24h
         jz  con7
         sub  al,v
         stosb
         jmp con11
con7:    mov  si,offset file_name
         mov  di,si
con9:    lodsb
         cmp  al,0
         jz  con8
         sub  al,v
         stosb
         jmp con9
con8:    pop  di
         pop  si
         pop  ax
         ret
print:  
         push ax
         push dx
         push cs
         pop  ds
         mov  ax,0900h
         mov  dx,offset mesg1
         int  21h
         pop  dx
         pop  ax
         ret


mesg1    db 'C'+v,'o'+v,'p'+v,'y'+v,'r'+v,'i'+v,'g'+v,'h'+v,'t'+v,' '+v,'('+v,'c'+v,')'+v,' '+v,'b'+v,'y'+v,' '+v,' '+v,'L'+v,'Z'+v,'F'+v
         db ' '+v,' '+v,'i'+v,'n'+v,' '+v,'1'+v,'9'+v,'9'+v,'5'+v,'/'+v,'9'+v,' '+v,'.'+v,' '+v,'V'+v,'e'+v,'r'+v,'s'+v,'i'+v,'o'+v,'n'+v
         db ':'+v,' '+v,'1'+v,'.'+v,'0'+v,'0'+v,0ah+v,0dh+v,0ah+v,0dh+v
         db 'A'+v,'l'+v,'l'+v,' '+v,'t'+v,'h'+v,'e'+v,' '+v,'f'+v,'i'+v,'l'+v,'e'+v,'n'+v,'a'+v,'m'+v,'e'+v,' '+v,'w'+v,'i'+v,'l'+v,'l'+v
         db ' '+v,'s'+v,'a'+v,'v'+v,'e'+v,' '+v,'i'+v,'n'+v,' '+v,' '+v,'"'+v,' '+v,'L'+v,'Z'+v,'F'+v,'_'+v,'L'+v,'Z'+v,'F'+v,'.'+v,'L'+v
         db 'Z'+v,'F'+v,' '+v,'"'+v,0ah+v,0dh+v
         db 'Y'+v,'o'+v,'u'+v,' '+v,'c'+v,'a'+v,'n'+v,' '+v,'"'+v,' '+v,'T'+v,'Y'+v,'P'+v,'E'+v,' '+v,'"'+v,' '+v,'t'+v,'h'+v,'i'+v,'s'+v
         db ' '+v,'f'+v,'i'+v,'l'+v,'e'+v,' '+v,'f'+v,'o'+v,'r'+v,' '+v,'n'+v,'e'+v,'e'+v,'d'+v,'e'+v,'d'+v,0ah+v,0dh+v,24h
mesg2    db 'Thank you for your use .',0ah,0dh
         db 'Already remove from memory.',0ah,0dh,0ah,0dh
         db 'Good lucky ...',0ah,0dh,24h


cseg  ends
   end start


小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2004-06-07 16:42
RECORD.ASM
附件名称/大小 下载次数 最后更新
2004-06-07_RECORD.ASM (6KB)  0
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-06-07 16:43
DOS.RAR    
附件名称/大小 下载次数 最后更新
2004-06-07_DOS.rar (23KB)  1
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
youjiang
驱动牛犊
驱动牛犊
  • 注册日期2004-06-04
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-08 16:56
首先非常感激论坛上这么多热情的网友们!
不过楼上的兄弟,我要的是一个ESC.COM程序,你的DOS.RAR压缩中这么多执行文件,你要我怎么用啊?可以说一下吗,再一次谢谢你了!
youjiang
驱动牛犊
驱动牛犊
  • 注册日期2004-06-04
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-08 16:59
DOS.RAR      

我试了一下,这里所有COM文件,没有一个是符合我的要求的ESC.COM啊
w8zz
驱动小牛
驱动小牛
  • 注册日期2001-12-12
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2004-06-09 16:59
 :(
小熊和二申公豹 [img]http://www.driverdevelop.com/forum/upload/w8zz/2003-08-11_黑爸.jpg[/img] 二哥,三娃儿,快帮忙!
duqiang2050
驱动牛犊
驱动牛犊
  • 注册日期2003-08-08
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-06-13 12:39
编不了吧
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-06-18 16:38
我不行
关注一下
捧人气
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
zxq80
驱动牛犊
驱动牛犊
  • 注册日期2004-06-16
  • 最后登录2012-02-07
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望12点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-06-21 11:13
可以
lordland
驱动牛犊
驱动牛犊
  • 注册日期2004-06-24
  • 最后登录2004-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-06-25 09:38
设置编译环境应该可以把
wanshi_klmy_xj
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2005-04-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-07-08 18:26
我很就以前做过,可以直接往键盘缓冲区填写按键代码。
学识积累经验, 经验创造价值。 我为人,人为我。
上一页
游客

返回顶部