只有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,此时扩充内存的综合利用情况最好。但要注意这两个变量只在保护模式下有效,在实模式下这两个变量并不存在。