CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

这段代码看不懂,帮帮我!

楼主netty(程序员的眼睛。魔术师的手。)2002-01-22 15:56:38 在 C/C++ / C语言 提问

void   addtobuffer(int   c)/*向键盘缓冲区中增加一个DOWN*/  
  {  
    unsigned   i;  
    i=*(unsigned   far   *)0x0040001CL;  
    *(unsigned   far   *)(0x00400000L   |   i)=c;  
    i+=2;  
    if   (i>=*(unsigned   far   *)0x00400082L)   i=*(unsigned   far   *)0x00400080L;  
    *(unsigned   far   *)0x0040001CL=i;  
  }  
  调用它的函数:  
  void   interrupt   newtimer()/*新的定时中断调用*/  
  {  
      int   leveltemp;  
      leveltemp=11-level;  
      count++;  
      if(count>=leveltemp)  
      {  
      addtobuffer(DOWN);//#define   DOWN   0x5000  
      count=0;  
      }  
    (*oldtimer)();  
  }  
  问题点数:20、回复次数:5Top

1 楼netty(程序员的眼睛。魔术师的手。)回复于 2002-01-22 16:01:56 得分 0

主要是addtobuffer看不懂,各位大侠有何高见Top

2 楼GuanXP(不能用于登录)回复于 2002-01-22 16:22:24 得分 10

void   addtobuffer(int   c)/*向键盘缓冲区中增加一个DOWN*/  
  {  
  unsigned   i;  
  i=*(unsigned   far   *)0x0040001CL;  
        //将long   型数   0x0040001C转换成(unsigned   far   *)指针(地址)  
        //再将该地址处的数据赋值给i  
   
  *(unsigned   far   *)(0x00400000L   ¦   i)=c;  
        //将i中内容与long型数0x00400000按位或,结果转换为(unsigned   far   *)指针  
        //再将c的内容复制到该指针所指地址处  
   
  i+=2;  
        //i自增2  
   
  if   (i>=*(unsigned   far   *)0x00400082L)   i=*(unsigned   far   *)0x00400080L;  
        //if(i中内容>地址0x00400082处内容)  
        //将地址0x00400080处内容复制到i中  
   
  *(unsigned   far   *)0x0040001CL=i;  
        //将i中内容复制到地址0x0040001C处  
  }  
  Top

3 楼eion(那个谁)回复于 2002-01-22 16:42:25 得分 2

因该是直接写向键盘缓冲的代码,但是我想下面的  
  i=*(unsigned   far   *)0x0040001CL;  
  可以猜想0x0040000是键盘缓冲的地址,你可以试试Top

4 楼jyc_nj(老蔣)回复于 2002-01-22 16:49:13 得分 8

把键值放到键盘缓冲区,具体地址不记得了,原理上是有一块键盘缓冲区,dos下是16个bytes,另外有一个首指针和一个尾指针,分别用于缓冲区数据的读和写。  
  上述函数中,先得到尾指针位置:i=*(unsigned   far   *)0x40001cL,   在*(0x40001   +   i   )处写入按下的键值,尾指针指向下一个位置:i+=2;如果超过范围(i>=*(unsigned   far   *)0x400082L),   尾指针值为*(unsigned   far   *)0x400080L的值。  
  好象与以前的键盘缓冲区管理方式有点不同了。Top

5 楼netty(程序员的眼睛。魔术师的手。)回复于 2002-01-22 16:51:00 得分 0

谢谢大侠相助Top

相关问题

  • 一段as代码,没看懂
  • 谁能看懂这段代码?散分!
  • 有谁懂这段代码
  • 这段代码读不懂
  • 这段代码搞不懂
  • 看不懂的代码
  • 看看这段代码`~~
  • 看看这段代码?
  • 看看这段代码
  • 看看这段代码~!

关键词

  • 指针
  • 键盘
  • 内容
  • addtobuffer
  • unsigned far
  • leveltemp
  • 键盘缓冲区
  • cl
  • 地址
  • down

得分解答快速导航

  • 帖主:netty
  • GuanXP
  • eion
  • jyc_nj

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo