大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal入门>>PascalFAQ编译模式专题         本站全文搜索: 友情提示:

PascalFAQ编译模式专题
http://www.mydrs.org  10/29/2002  大榕树



什么是编译模式?



编译模式是指编译器对程序的编译方式,以不同的编译模式编译的程序将在不同的环境中运行,只有Borland Pascal 7.0和Free Pascal支持以不同的编译模式编译程序。Borland Pascal 7.0支持3种编译模式:DOS实模式、DOS保护模式和Windows模式。Free Pascal目前支持6种编译模式:DOS(GO32V1)、DOS(GO32V2)、Freebsd、Linux、OS/2和Win32。



DOS实模式是把程序编译为实模式应用程序的编译模式,它是默认的16位DOS程序编译方式,Free Pascal不支持以DOS实模式编译程序。实模式应用程序可以使用最大640KB的DOS常规内存,内存访问速度较快,可执行文件较小,可以单独运行,但无法在DOS实模式中使用动态链接库。



DOS保护模式是把程序编译为保护模式应用程序的编译模式。保护模式应用程序可以访问计算机所有可利用的扩充内存(Extended Memory,简称XMS),它通过使用DPMI(DOS Protected Mode Interface)来在保护模式下运行。在保护模式下应用程序只能访问自己持有的内存数据,而不允许访问非法的内存段,否则将会产生错误,其访问内存的速度会比在DOS实模式下稍慢一些,能够使用动态链接库。


如何使用DOS保护模式?



只有Borland Pascal 7.0支持以DOS保护模式编译程序,你必须在菜单Compile -> Target中选择Protected mode Application后才能以DOS保护模式编译程序。由于保护模式的实现比较复杂,Borland Pascal 7.0无法调试保护模式应用程序。你可以先在DOS实模式下调试程序,在确定程序正确后才转用DOS保护模式编译。


保护模式应用程序在启动时需要调用Rtm.exe来装载保护模式系统,因此你必须确保Rtm.exe存放在应用程序所在的目录下或者DOS的默认搜索路径下,你可以在Borland Pascal 7.0的工作目录下找到该文件。在比赛时,你最好预先询问一下出题者或工作人员是否允许使用保护模式,否则你的程序在测试时可能会因缺少文件Rtm.exe而无法执行。


保护模式应用程序不允许访问不由自己持有的内存段,否则将会产生216号错误。如果你的程序在运行时出现216号错误,请检查你的程序是否在动态数据的分配和访问上出了问题。这种内存违法访问的错误在DOS实模式下可能会被隐藏起来而无法发现,因此即使你的程序不需要使用保护模式,你也可以通过保护模式来检查它是否正确。如果你需要访问ROM BIOS或视频内存,你可以使用System单元的变量Seg0040、SegA000、SegB000和SegB800来代替只在DOS实模式下可用的段地址$0040、$A000、$B000和$B800。


保护模式应用程序虽然在理论上可以利用所有的扩充内存,但实际上经常只能使用所有扩充内存的一部分。例如,如果你的计算机上配有64MB的扩充内存,那么你的程序在保护模式下运行时有时可能只能用到32MB,此时再分配内存就会产生错误。你可以通过调整System单元的变量HeapBlock和HeapLimit的值来改善扩充内存的利用情况。我的许多次测试的结果表明,把HeapBlock和HeapLimit分别赋值为65528和16382,此时扩充内存的综合利用情况最好。但要注意这两个变量只在保护模式下有效,在实模式下这两个变量并不存在。


作 者:陈世熹
共有4246位读者阅读过此文

  • 上篇文章PascalFAQ编程工具专题
  • 下篇文章PascalFAQ编译指示专题

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8307]
    2. 七类高中生具有保送资格 [5911]
    3. NOI2006获奖选手名单 [4956]
    4. 关于举办NOIP2006模拟赛的通告 [4107]
    5. Turbo Pascal各语句运行速... [3595]
    6. Turbo王者归来新Delphi免费... [3182]
    7. IOI2006我国4名选手全部获得金... [2946]
    8. 关于APIO2007与IOI2007... [2764]
    9. noip倒计时 by 枯叶蝴蝶 [2684]
    10. 朱泽园:思想上的金牌更重要 [2169]
    PascalFAQ之特殊技术
    PascalFAQ之基本技巧
    PascalFAQ之数据类型
    PascalFAQ之语法专题
    PascalFAQ之输入输出
    PascalFAQ之内存分配
    PascalFAQ编译指示专题
    PascalFAQ编译模式专题
    PascalFAQ编程工具专题
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号