我也不知道这个问题是不是应该放在这里,但看这里人气多,所以就……我经常会为这些问题所困惑:1.Console程序和一个纯DOS程序有什么区别??
  Console程序是16位的还是32位?在NT下面的“命令行提示符”窗口中运行的程序是16位的还是32位的?CS(我指的是反恐精英游戏)是不是一个纯DOS程序呢?为什么在他开始运行的时候屏幕要全部黑一下,然后开始运行?那些“要先黑一下,再在全屏下运行”的程序和那些在规范的WINDOWS窗口下运行的程序有什么区别?有人说CS是运行在一中V86的模式下,但是我直接用16位的汇编指令编写了一个纯8086的程序,拿到XP下面执行,但是它还是规规矩矩地在命令行提示的窗口中运行,他在运行时是16位的吗?这个纯16位的8086为什么没有“使屏幕先黑一下,再全屏运行”呢?2.NT不是和DOS绝缘了吗?为什么我还可以在XP下写汇编程序的时候使用“int 21h”去“call DOS”呢?!经常会看到有的书上说“哪些内存是干什么的”,“哪些内存被系统占用了”等等。他们怎么知道的呢?是不是有什么程序可以窥探内存的使用情况,或者有什么文档说明这些呢?3.整个Intel 80X86指令系统没有一条指令是动态分配内存的.所有程序的数据段,都必须有明确的界限但是C++这样的高级语言中却有new和delete这样的关键字.C++是怎样实现这项功能呢?如果他提前申请了大段内存,然后进行分配,那么我用一个死循环去new一系列数据,C++程序仍然可以做到,并直到内存耗尽为止,请问这又如何解释?请大家尽量解释,或发表自己的看法,但尽量要有根据,可以给出一些解答类似问题的书籍。谢谢!

解决方案 »

  1.   

    Console是控制台。其官方说法是32位的,因为其执行格式PE。而在DOS下,这个格式是不一样的。到于CS运行时为什么会先黑一下,这个和DirectX有关系,因为DirectX的图形初始化就是这样的。尤其是CS使用了DDSCL_FULLSCREEN模式,这是独占模式。一个DOS程序拿到WINDOWS下执行,只能说是WINDOWS能够运行以前的DOS程序而已。规探内存的使用情况不难,搜索一下,有人问过这样的问题。当然没有动态分配,但是可以先分配一些,不够用的时候,再分配当前的数量加上一个基数,然后将当前的内存中的内容move过去,再delete当前的内容。然后将指针指向新的区域。这样内存块就是可变的了。new和delete只是一个操作符而已,其实和malloc、free没有什么区别,只是new中除了malloc之外,还会帮你调用一个函数(结构体)的构造函数,delete同理,会调用其析构函数。
    多说一点,对于像char buffer[255]这样的方法,其实道理是一样的。
      

  2.   

    那我写的16位的8086汇编程序呢?他怎么可以在32位的console下运行?
      

  3.   

    <<windows驱动程序设计>>推荐楼主看一看。